Editorial for WC '17 Contest 2 S2 - Don't Follow the Lights
Submitting an official solution before solving the problem yourself is a bannable offence.
We can represent the grid as a graph, with one node per cell, and an unweighted, directed edge for each valid move between pairs of cells. We then need to find the length of the shortest path from one node to another on this graph, which can be done with a standard application of Breadth First Search (BFS). There are nodes in the graph, and at most four outgoing edges from each node, meaning that there are also edges in total. The time complexity of BFS is then , which is fast enough.
Assuming familiarity with BFS, the trickiest part of the solution is efficiently determining the set of edges which exist in the graph in the first place. For a given cell (in row and column ), it's possible to move upwards to cell if , neither of those two cells contain a torch, and there are fewer than two torches in all of cells (or, equivalently, in cells ). Similar conditions apply to moving downwards, leftwards, and rightwards from cell .
The most direct method of finding all valid moves which satisfy the above conditions is to consider each cell independently. A simple check for whether there are fewer than two torches in cells takes time. The corresponding check for torches below cell also takes time, while the checks for torches to the left and right each take time. Therefore, this approach for constructing the graph takes time in total, which isn't efficient enough to receive full marks.
The time complexity of the above process can be improved to by observing that, for example, the number of torches in cells can be computed in if we already have the number of torches in cells . If we fix and iterate upwards from to , while maintaining the number of torches encountered so far in that column (in other words, the number of torches in cells ), then we can find all of the valid upwards moves in that column in just time. This can then be repeated for all columns, and a similar process can be repeated for the other three directions.
Comments