CCO '15 P4 - Cars on Ice

View as PDF

Submit solution

Points: 10 (partial)
Time limit: 7.0s
Memory limit: 1G

Problem type
Canadian Computing Olympiad: 2015 Day 2, Problem 1

Guarding a bank during Christmas night can get very boring. That's why Barry decided to go skating around the parking lot for a bit. However the parking lot isn't empty as the other security guards have their cars parked there. So Barry decides to push their cars out of the parking lot. He notices that their cars are parked facing either North, South, East or West. Since the parking lot is frozen, pushing a car will make it slide until it has left the parking lot or hit another car. Cars can only be pushed in the direction which they are facing. Not wanting to crash the cars, Barry enlists your help to find out what order he has to push the cars so as to clear the parking lot.

Input Specification

The first line contains two integers N and M (1 \le N,M \le 2000) representing the number of rows and columns of the parking lot. The next N lines each contain M characters representing the parking lot itself, where . represents an empty spot, while N, S, E and W each represent a car (facing North, South, East or West, respectively).

For at least 70% of the marks for this problem, N \le 100 and M \le 100.

Output Specification

Output the order in which the cars have to be pushed so as to clear the parking lot without crashes. Output each car in the form (r, c), where r and c are the car's coordinates on the parking lot (where (0, 0) is the top leftmost spot and (N-1, M-1) is the bottom rightmost spot).

You can assume there will always be at least one valid solution.

If there are multiple possible solutions, output any valid solution.

Sample Input 1

5 5
.....
.E.S.
.....
.....
.N.E.

Output for Sample Input 1

(4,3)
(1,3)
(1,1)
(4,1)

Explanation for Output for Sample Input 1

The only car that isn't initially blocked by another car is the one at (4, 3). After that's pushed out to the right side of the parking lot, then the car above it (at (1, 3)) can be pushed, and then the one at (1, 1), and finally the car at (4, 1), clearing the parking lot.

Sample Input 2

4 3
...
.N.
.S.
...

Output for Sample Input 2

(1,1)
(2,1)

Explanation for Output for Sample Input 2

Either car could be pushed first to clear the parking lot, so this output is acceptable (as would the output with the lines outputted in reverse order).


Comments


  • 1
    Darcy_Liu  commented on Jan. 20, 2020, 5:54 p.m. edit 3

    Passed TC 10 with iteration, not with recursion


  • -7
    p1geon  commented on Feb. 12, 2019, 2:13 p.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


    • 6
      Zeyu  commented on Feb. 12, 2019, 6:32 p.m. edited

      Yes it is possible! In pypy2 the worst test took ~3 seconds.


  • -2
    anasschoukri2  commented on Jan. 28, 2018, 10:34 a.m.

    what if the car is already in the place we want to put it in


    • 4
      injust  commented on Jan. 28, 2018, 11:03 a.m.

      That can't be the case, you're trying to clear the board of cars.