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