호반우가 학교에 지각한 이유 8
시간 제한2초메모리 제한1024 MB
원점에서 행성 N까지 가는 최소 시간을 구합니다. 행성 e로 갈 때 출발점이 0번부터 e번까지 행성의 볼록 다각형 경계에 있으면 a_e, 아니면 b_e가 듭니다.
문제
이제 호반우는 그리운 경북대학교로 돌아가려고 한다. 그러나 문제가 하나 있다. 지구에서 이세계로 오는 것은 쉬워도, 이세계에서 지구로 돌아가는 것은 어렵다.
2차원 좌표평면으로 나타낼 수 있는 우주에는 이세계를 제외한 개의 행성이 있다. 값이 작은 순서대로 1번 행성, 2번 행성, ..., 번 행성이라고 부른다.
인 에 대해 번 행성은 1사분면 위에 있는 정수 좌표 에 있고, 양의 정수 , 를 가진다.
처음에 호반우는 이세계이자 0번 행성의 위치인 에 있다. 호반우는 여러 행성을 거쳐 지구로 돌아가는 차원문이 있는 번 행성에 가려고 한다.
호반우는 한 번의 이동에 개의 행성을 지나칠 수 있다. 정확히는, 호반우가 번 행성에 있을 때 번 행성으로 이동하려면 을 만족해야 한다. 이때 이동 시간은 0번부터 번까지의 행성들을 모두 포함하는 가장 작은 볼록 다각형을 만들었을 때, 번 행성이 볼록 다각형 경계에 위치하면 , 그렇지 않으면 이다. 직선도 볼록 다각형으로 본다.
이세계에서 번 행성까지 빠르게 도착해서 호반우가 학교에 지각하지 않도록 도와주자!
입력
첫 번째 줄에 테스트 케이스의 개수 가 주어진다. ()
각 테스트 케이스의 첫 번째 줄에는 공백을 두고 과 이 주어진다. ()
두 번째 줄부터 개의 줄에 걸쳐 공백을 두고 , , , 가 주어진다. ()
모든 테스트 케이스에 대하여 항상 을 만족한다.
모든 테스트 케이스의 의 합은 을 넘지 않는다.
출력
각 테스트 케이스마다 호반우가 이세계에서 출발해 번 행성에 도착하기까지 걸리는 시간의 최솟값을 출력한다.
힌트
입출력의 양이 많으므로 빠른 입출력을 사용하는 것을 권장한다. 언어별 빠른 입출력은 아래를 참고한다.
- C++:
cin,cout을 사용하는 경우 입출력 전에cin.tie(nullptr); ios::sync_with_stdio(false);를 한 번 적용해야 한다. 줄 바꿈할 때는endl대신'\n'을 사용해야 한다. - Java:
BufferedReader와BufferedWriter를 사용해야 한다. - Python3, PyPy3:
input()대신sys.stdin.readline().rstrip()을 사용해야 한다.