문제 링크
- http://icpc.me/20031
사용 알고리즘
- Union Find
시간복잡도
- $O(N + Q \log Q)$
풀이
모든 좌표(쿼리)를 입력 받은 다음, 한 번에 처리하는 오프라인 방식으로 문제를 풉니다.
각 턴마다 차 Q대를 모두 이동시키는 것은 무리같으니 반대로 벽을 움직인다고 생각합시다.
만약 어떤 차가 벽이랑 충돌하면 그 행동은 취소됩니다. 이는 충돌하게 되는 차도 같이 벽이 이동하는 방향으로 밀어주는 것으로 구현할 수 있습니다.
이 행위로 인해 어떤 두 차가 동일한 칸에 속하게 된다면 그 시점 이후에도 계속 같은 칸에 속합니다. 이런 차들은 Union Find로 묶어서 관리해주면 됩니다.
답을 출력할 때는 벽과 차의 위치를 적당히 평행이동해서 출력하면 됩니다.
전체 코드
1 |
|