도로

시간 제한1초메모리 제한128 MB

요약
통과 지점이 있는 도로에서 동쪽行과 서쪽行 차량이 서로 지나치는 지점을 정한 행렬이 주어질 때, 그 일정을 실현하는 최소 총 시간을 구합니다. 차량은 12.5m/s로 달리거나 정차하며, 같은 방향 차량은 25m 간격을 유지합니다.
난이도

보통10점 중 7점

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

문제

네덜란드의 그린 하트 지역은 마을이 작고 길이 좁다. 어떤 길은 폭이 차 한 대뿐이어서 마주 오는 두 차가 만나면 오도 가도 못한다. 길 양옆으로 운하가 흘러 어느 쪽도 길 밖으로 비켜 줄 수 없다. 그래서 길 곳곳을 조금씩 넓혀 두었고, 이렇게 넓힌 자리를 대피소라고 하자. 대피소에서는 차 한 대가 옆으로 비켜서고 반대편에서 오는 차가 한 대 이상 지나간다. 통행량이 적을 때는 이것으로 충분하다. 짧은 시간에 양쪽에서 차가 몰리면 길이 막힌다.

이런 길에서 가장 좋은 통행 계획을 찾는 일은 꽤 어렵다. 그래서 이 문제는 더 쉬운 것을 묻는다. 길은 동서로 뻗어 있다. 동쪽으로 가는 차는 서쪽 끝에서 들어와 동쪽 끝으로 나가고, 서쪽으로 가는 차는 그 반대다. 대피소의 위치, 동쪽으로 가는 차의 수 ee, 서쪽으로 가는 차의 수 ww, 그리고 통행표가 주어진다. 통행표는 동쪽으로 가는 차와 서쪽으로 가는 차의 모든 쌍에 대해 두 차가 서로 지나치는 지점을 알려 준다.

지점 zz에서 지나치는 두 차는 그 순간 둘 다 zz에 있다. 즉 상대가 zz에 도착하기 전에는 어느 쪽도 zz를 지나 더 나아가지 못한다.

모든 차는 처음부터 들어갈 준비를 마쳤고, 운전자는 되도록 빨리 길을 빠져나가려 한다. 차는 멈춰 서 있거나 시속 45km로 달리며, 출발과 정지에는 시간이 걸리지 않는다. 같은 방향으로 가는 차끼리는 항상 25m 이상 거리를 두고 서로 앞지르지 않으며, 기다리는 동안 길 위에 줄지어 서 있어도 된다. 서로 다른 두 대피소 사이의 거리는 30m 이상이다. 차의 길이는 무시한다.

첫 번째 차가 길에 들어선 순간부터 마지막 차가 길을 빠져나가는 순간까지의 시간을 재고, 그 간격을 가장 짧게 만들려고 한다.

입력

첫 줄에 테스트 케이스의 수 nn이 주어진다. 각 테스트 케이스는 다음과 같이 이루어진다.

  • 길의 길이 ll (0<l≤300000 < l \le 30000, 단위는 미터)과 대피소의 수 pp (0<p0 < p)가 한 줄에 주어진다.
  • 각 대피소가 길의 서쪽 끝에서 떨어진 거리를 미터 단위 양의 정수 pp개로, 증가하는 순서로 한 줄에 준다.
  • 동쪽으로 가는 차의 수 ee와 서쪽으로 가는 차의 수 ww (0<e,w≤10000 < e, w \le 1000)가 한 줄에 주어진다.
  • 수 ww개가 적힌 줄이 ee개 이어진다. yy번째 줄 (1≤y≤e1 \le y \le e)의 xx번째 수 zz (1≤x≤w1 \le x \le w, 0≤z≤p+10 \le z \le p + 1)는 동쪽으로 가는 yy번 차와 서쪽으로 가는 xx번 차가 지점 zz에서 서로 지나친다는 뜻이다. 지점 ii (1≤i≤p1 \le i \le p)는 둘째 줄에 주어진 ii번째 대피소이고, 지점 00은 서쪽 끝, 지점 p+1p + 1은 동쪽 끝이다. z=0z = 0은 xx번 차가 길을 빠져나간 뒤에 yy번 차가 길에 들어선다는 뜻이고, z=p+1z = p + 1은 yy번 차가 길을 빠져나간 뒤에 xx번 차가 들어선다는 뜻이다.

서쪽으로 가는 xx번 차는 x+1x + 1번 차보다 먼저 길에 들어서고, 동쪽으로 가는 yy번 차는 y+1y + 1번 차보다 먼저 들어선다. 한 줄에 있는 수는 하나 이상의 공백으로 구분한다.

출력

각 테스트 케이스마다 한 줄에 수 하나를 출력한다. 주어진 통행표를 지키는 가장 빠른 통행에서, 첫 번째 차가 길에 들어선 순간부터 마지막 차가 빠져나가는 순간까지 걸린 시간을 초 단위로 재어 가장 가까운 정수로 반올림한 값이다. 모든 거리가 정수 미터이고 시속 45km는 초속 12.5m이므로, 정확한 시간은 언제나 0.08초의 배수이고 두 정수의 한가운데에 놓이는 일은 없다.

예제2

  1. 예제 1

    입력
    2
    150 1
    50
    1 1
    1
    100 1
    30
    3 2
    2 2
    1 2
    0 2
    
    예상 출력
    16
    32
    
  2. 예제 2

    입력
    1
    200 2
    60 140
    2 1
    2
    1
    
    예상 출력
    29