도로
시간 제한1초메모리 제한128 MB
통과 지점이 있는 도로에서 동쪽行과 서쪽行 차량이 서로 지나치는 지점을 정한 행렬이 주어질 때, 그 일정을 실현하는 최소 총 시간을 구합니다. 차량은 12.5m/s로 달리거나 정차하며, 같은 방향 차량은 25m 간격을 유지합니다.
문제
네덜란드의 그린 하트 지역은 마을이 작고 길이 좁다. 어떤 길은 폭이 차 한 대뿐이어서 마주 오는 두 차가 만나면 오도 가도 못한다. 길 양옆으로 운하가 흘러 어느 쪽도 길 밖으로 비켜 줄 수 없다. 그래서 길 곳곳을 조금씩 넓혀 두었고, 이렇게 넓힌 자리를 대피소라고 하자. 대피소에서는 차 한 대가 옆으로 비켜서고 반대편에서 오는 차가 한 대 이상 지나간다. 통행량이 적을 때는 이것으로 충분하다. 짧은 시간에 양쪽에서 차가 몰리면 길이 막힌다.
이런 길에서 가장 좋은 통행 계획을 찾는 일은 꽤 어렵다. 그래서 이 문제는 더 쉬운 것을 묻는다. 길은 동서로 뻗어 있다. 동쪽으로 가는 차는 서쪽 끝에서 들어와 동쪽 끝으로 나가고, 서쪽으로 가는 차는 그 반대다. 대피소의 위치, 동쪽으로 가는 차의 수 , 서쪽으로 가는 차의 수 , 그리고 통행표가 주어진다. 통행표는 동쪽으로 가는 차와 서쪽으로 가는 차의 모든 쌍에 대해 두 차가 서로 지나치는 지점을 알려 준다.
지점 에서 지나치는 두 차는 그 순간 둘 다 에 있다. 즉 상대가 에 도착하기 전에는 어느 쪽도 를 지나 더 나아가지 못한다.
모든 차는 처음부터 들어갈 준비를 마쳤고, 운전자는 되도록 빨리 길을 빠져나가려 한다. 차는 멈춰 서 있거나 시속 45km로 달리며, 출발과 정지에는 시간이 걸리지 않는다. 같은 방향으로 가는 차끼리는 항상 25m 이상 거리를 두고 서로 앞지르지 않으며, 기다리는 동안 길 위에 줄지어 서 있어도 된다. 서로 다른 두 대피소 사이의 거리는 30m 이상이다. 차의 길이는 무시한다.
첫 번째 차가 길에 들어선 순간부터 마지막 차가 길을 빠져나가는 순간까지의 시간을 재고, 그 간격을 가장 짧게 만들려고 한다.
입력
첫 줄에 테스트 케이스의 수 이 주어진다. 각 테스트 케이스는 다음과 같이 이루어진다.
- 길의 길이 (, 단위는 미터)과 대피소의 수 ()가 한 줄에 주어진다.
- 각 대피소가 길의 서쪽 끝에서 떨어진 거리를 미터 단위 양의 정수 개로, 증가하는 순서로 한 줄에 준다.
- 동쪽으로 가는 차의 수 와 서쪽으로 가는 차의 수 ()가 한 줄에 주어진다.
- 수 개가 적힌 줄이 개 이어진다. 번째 줄 ()의 번째 수 (, )는 동쪽으로 가는 번 차와 서쪽으로 가는 번 차가 지점 에서 서로 지나친다는 뜻이다. 지점 ()는 둘째 줄에 주어진 번째 대피소이고, 지점 은 서쪽 끝, 지점 은 동쪽 끝이다. 은 번 차가 길을 빠져나간 뒤에 번 차가 길에 들어선다는 뜻이고, 은 번 차가 길을 빠져나간 뒤에 번 차가 들어선다는 뜻이다.
서쪽으로 가는 번 차는 번 차보다 먼저 길에 들어서고, 동쪽으로 가는 번 차는 번 차보다 먼저 들어선다. 한 줄에 있는 수는 하나 이상의 공백으로 구분한다.
출력
각 테스트 케이스마다 한 줄에 수 하나를 출력한다. 주어진 통행표를 지키는 가장 빠른 통행에서, 첫 번째 차가 길에 들어선 순간부터 마지막 차가 빠져나가는 순간까지 걸린 시간을 초 단위로 재어 가장 가까운 정수로 반올림한 값이다. 모든 거리가 정수 미터이고 시속 45km는 초속 12.5m이므로, 정확한 시간은 언제나 0.08초의 배수이고 두 정수의 한가운데에 놓이는 일은 없다.