Reunión de los estudiantes


Submit solution

Points: 100 (partial)
Time limit: 1.0s
Memory limit: 64M

Author:
Problem type
Allowed languages
Ada, BrainF***, C, C#, C++, Dart, Go, Java, JS, Kotlin, Lua, Pascal, Prolog, Python, Swift, VB

Los concursantes de la CIIC que asistirán a la próxima IOI están probando un sistema de movimientos que les permita reunirse en algún punto y no perderse en ciudades extrañas para ellos. Utilizaremos para la representación de las ciudades un tablero de NxN casillas donde cada uno de los concursantes está en diferentes casillas. En una unidad de tiempo cada concursante tiene que moverse de cualquiera de las siguientes cuatro maneras:

b casillas al oeste y b casillas al norte.

b casillas al este y b casillas al sur.

b casillas al oeste y b casillas al sur.

b casillas al este y b casillas al norte.

Nótese que todos los concursantes se mueven a la vez y aunque inician en distintas posiciones pueden eventualmente compartir alguna posición; además está prohibido que un concursante permanezca sin moverse durante una unidad de tiempo.

El tablero está periodificado, esto quiere decir que si un concursante salta de una posición (a, b), x cuadros al este (x puede ser negativo) y y cuadros al sur (y también puede ser negativo), entonces su posición final será ((a+x) mod N, (b+y) mod N), el operador mod representa la división entera entre dos números enteros. Nótemos que a mod b es el residuo no negativo de dividir a por b. Es decir, el menor entero no negativo c tal que a-c es múltiplo de b. Por ejemplo: -1 mod 9 = 8, -9 mod 7 = 5, 17 mod 3 =2. En otras palabras como nuestro tablero no tiene posiciones negativas, cuando nos movemos y llegamos a un lado del tablero entonces continuamos el mismo movimiento en el lado opuesto a este.

Los concursantes quieren saber si es posible que ellos puedan reunirse en un mismo lugar después de cierto número de unidades de tiempo, y de ser posible, que dicho número de unidades de tiempo sea el menor.

Tu tarea es hacer un programa que permita:

  • Leer desde la entrada la ubicación de los concursantes en el tablero y la cantidad de casillas que se pueden mover.
  • Determinar, si es posible, el mínimo número de unidades de tiempo que los concursantes necesitan para reunirse en un mismo lugar.
  • Escribir hacia la salida el mínimo de tiempo encontrado o un cartel indicando que es imposible reunirse todos los concursantes en un mismo punto.

Entrada

Línea 1: Dos enteros: N y b, separados entre si por un espacio en blanco, los cuales representan respectivamente las dimensiones del tablero y la cantidad de casillas que se pueden desplazarse los concursantes. Línea 2..N+1: En cada una de ellas aparecerán N dígitos(sin espacios) que pueden ser 1 ó 0 representando posiciones de la cuadrícula, donde 1 significa que hay un estudiante en la casilla y 0 que la casilla está vacía. La esquina superior izquierda del tablero es la (0, 0).

Salida

La salida contiene en una sola línea un entero indicando el mínimo número de unidades de tiempo, si no es posible reunir los concursantes se debe imprimir “INFINITO”.

Ejemplo de Entrada

3 2
101
000
000

Ejemplo de Salida

1

Explicación

El estudiante que está en (0,0) da un salto de la forma (2,-2) llegando a (2 mod 3, -2 mod 3)=(2, 1) y el que está en (0,2) da un salto de la forma (2,2) llegando a ( ( 0+2 ) mod 3 , (2+2) mod 3 )=( 2, 1)

Restricciones

  • Para todos los casos 2 \leq N \leq 500.

Comments

There are no comments at the moment.