아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

기차역 지하 통로

시간 제한5초메모리 제한256 MB

요약
막힘과 비켜서기 규칙에 따라 양방향 보행자가 터널을 빠져나가는 과정을 틱 단위로 시뮬레이션하고 마지막 사람이 탈출하는 시각을 구합니다.
난이도

보통10점 중 5점

유형
시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

역에서 선로로 드나드는 길은 지하 통로 하나뿐이다. 혼잡한 시간에는 역의 한쪽에서 반대쪽으로 가려는 사람이 몰린다. 두 출구의 중요도가 비슷해서 절반쯤은 한쪽으로, 나머지 절반쯤은 반대쪽으로 걷는다. 사람은 서로를 통과하지 못하므로 서로 길을 막는다. 걷는 속도도 사람마다 달라서 빠른 사람이 앞사람을 기다리는 일이 생긴다.

통로가 많은 인원을 얼마나 잘 소화하는지 재기 위해 통로를 이차원 격자로 본다. 통로의 길이는 ll, 너비는 ww이고 사람 한 명은 격자점 하나를 차지한다. 선로는 무시하고, 통로의 왼쪽 면 전체와 오른쪽 면 전체가 입구다. 왼쪽 위 격자점이 (1,1)(1, 1), 오른쪽 아래 격자점이 (l,w)(l, w)이며 둘 다 통로 안이다. 즉 xx는 오른쪽으로, yy는 아래로 커진다. 출발 위치가 서로 다른 것은 도착 시각이 서로 다르다는 뜻이다.

시간은 틱 단위로 흐른다. 속도가 ss인 사람은 매 틱마다 자기 방향으로 ss칸 가려 한다. 사람은 다른 사람도 벽도 통과하지 못한다. 뒷사람이 앞사람의 등에 부딪혀도 앞사람의 속도는 달라지지 않는다. 뒷사람은 앞사람 뒤에 남는 범위에서 갈 수 있는 만큼 간다. 반대 방향으로 오는 사람과 부딪히면 움직이던 사람은 부딪힌 상대의 바로 앞 격자점에서 이동을 끝낸다.

대학이 통로 오른쪽에 있어서 왼쪽에서 오른쪽으로 가는 사람이 더 급하다. 그래서 매 틱마다 오른쪽으로 가는 사람이 먼저 움직이고 그다음에 왼쪽으로 가는 사람이 움직인다. 같은 방향으로 가는 사람은 동시에 움직인다.

다른 사람과 부딪혀서 그 틱에 가려던 거리의 절반(올림) 이하만 간 사람은 짜증이 난다. 속도가 ss인 사람이라면 실제로 간 거리가 ss보다 작고 ⌈s/2⌉\lceil s/2 \rceil 이하인 경우다. 짜증이 난 사람은 다음 틱이 시작되기 전에 옆으로 한 칸 비켜서려 한다.

틱 사이의 비켜서기는 다음 순서로 일어난다. 먼저 위에서 아래로, 오른쪽으로 가는 짜증 난 사람이 각자 자기 왼쪽(즉 위)으로 한 칸 비켜서려 한다. 다음으로 아래에서 위로, 왼쪽으로 가는 짜증 난 사람이 각자 자기 왼쪽(즉 아래)으로 비켜서려 한다. 다음으로 아래에서 위로, 왼쪽으로 비켜서지 못해 아직 짜증이 난 오른쪽 방향 사람이 자기 오른쪽(즉 아래)으로 비켜서려 한다. 마지막으로 위에서 아래로, 아직 짜증이 난 왼쪽 방향 사람이 자기 오른쪽(즉 위)으로 비켜서려 한다. 비켜서기는 xx를 그대로 두고 yy만 1 바꾸는 이동이며, 목표 격자점이 통로 안이고 비어 있을 때만 성공한다. 새 틱이 시작되면 짜증은 풀린다.

모든 사람이 통로를 떠나는 시각을 구하려 한다. 통로를 떠난다는 것은 자기가 향하던 출구 밖으로 나가는 것이다. 출발 위치에서 모든 사람이 통로 끝까지 갈 수 있는 입력만 주어진다.

입력

첫 줄에 테스트 케이스의 개수를 나타내는 양의 정수가 주어진다. 이 값은 100 이하다. 그 뒤로 테스트 케이스마다 다음이 주어진다.

  • 공백으로 구분된 정수 ll, ww, pp (1≤l,w≤30001 \le l, w \le 3000, 1≤p≤10001 \le p \le 1000)가 한 줄에 주어진다. 각각 통로의 길이, 통로의 너비, 사람 수다.
  • 다음 pp개의 줄에는 공백으로 구분된 정수 xx, yy, ss (0<x≤l0 < x \le l, 0<y≤w0 < y \le w, 0<s≤10000 < s \le 1000)가 주어진다. 한 사람의 출발 위치 (x,y)(x, y)와 속도 ss다. 그 뒤에 공백 하나와 문자 하나가 이어지는데, L이면 그 사람은 통로의 왼쪽으로 걷고 R이면 오른쪽으로 걷는다.

통로를 떠난 사람은 격자에서 사라진다. x≤0x \le 0 또는 x>lx > l이 되면 통로를 떠난 것이다.

출력

테스트 케이스마다 한 줄에 정수 하나를 출력한다. 모든 사람이 통로를 떠나기까지 걸린 틱 수의 최솟값이다.

예제2

  1. 예제 1

    입력
    2
    11 10 3
    1 1 2 R
    10 1 2 L
    11 1 3 L
    8 4 3
    4 2 3 R
    1 3 3 R
    8 2 5 L
    
    예상 출력
    8
    4
    
  2. 예제 2

    입력
    3
    1 1 1
    1 1 1 R
    1 1 1
    1 1 1000 L
    3000 1 1
    1 1 1 R
    
    예상 출력
    1
    1
    3000