Editorial for Laberinto
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Subtarea 1:
Como . Podemos crear un grafo donde los nodos sean las posiciones de la matriz, conectamos todos los con con costo 0, los con los con costo , y los con los con costo . Siempre que esas posiciones sean válidas (). La solúcion del problema es la cantidad de nodos de ese grafo que tienen una distancia menor igual a con respecto al nodo inicial . Se puede calcular con dijkstra en o con 0-1 BFS en .
Para los que no lo conozcan el 0-1BFS es un algoritmo usado para buscar camino mínimo en un grafo en el que el peso de las aristas es 0 o 1. Es igual que el BFS común pero se hace con una doble cola(deque), y al updatear un nodo con una distancia mejor, se añande al principio de la cola si se llegó con costo 0, o al final si se llegó con costo 1. La complejidad es .
Subtarea 2:
Para esta subtarea modificaremos un poco los nodos, ahora los nodos son que significa, en la posición de la matriz habiendo hecho l movimientos hacia la izquierda, las aristas seran de los tipos siguientes:
Del nodo al o al con costo .
Del nodo al con costo .
Del nodo al con costo .
La respuesta será la cantidad de posiciones tal que hay algún nodo para que el costo de ir de a él sea menor o igual a Y.
Con 0-1 BFS la complejidad es .
Subtarea 3:
Supongamos que comenzamos en la celda y examinamos si podemos llegar a la celda .
Denotemos el número de movimientos realizados hacia la derecha como R y el número de movimientos hacia la izquierda como L
Claramente,
Es decir, , expresado de otra manera , donde solo depende de la celda inicial y la celda objetivo.
Entonces solo necesitamos minimizar cualquiera de los movimientos hacia la izquierda o hacia la derecha, el otro también será óptimo.
Para calcular el número mínimo posible de movimientos para llegar a alguna celda, podemos usar 0-1 bfs.
La solución es .
Comments