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

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

고속도로 연결

시간 제한0.4초메모리 제한32 MB

요약
평면 위 두 연결된 네트워크가 주어질 때, 정해진 각도 규칙에 따라 새 선분으로 이을 수 있는 빨강-파랑 교차점 쌍을 찾는다.
난이도

어려움10점 중 9점

유형
기하, 정렬, 그래프, 이분 탐색
정답자
아직 제출이 없습니다

문제

바이트랜드에는 Red와 Blue 두 회사가 운영하는 고속도로망이 있다. 두 망은 모두 교차점과, 교차점 두 개를 잇는 직선 구간으로 이루어진다. 한 망 안에서 두 구간은 교차점에서만 맞닿고 다른 점에서는 만나지 않는다. 두 망은 각각 연결되어 있어서 같은 망의 교차점 두 개는 언제나 구간을 따라 오갈 수 있다. 한 교차점이 두 망에 동시에 속하는 일은 없다. 서로 다른 망에 속한 구간끼리는 교차해도 된다.

두 회사가 합병하기로 했다. Red의 교차점 하나와 Blue의 교차점 하나를 잇는 직선 구간을 하나만 새로 지어서 두 망을 연결하려고 한다. 새 구간은 자기 두 끝점을 빼면 기존 구간과 어떤 점도 공유하면 안 된다.

입력

입력은 Red 망의 정보와 Blue 망의 정보를 차례로 담는다. 각 망의 첫 줄에는 교차점의 개수 NN과 구간의 개수 MM이 주어진다 (2≤N≤2000002 \le N \le 200000, 1≤M≤7000001 \le M \le 700000). 다음 NN개 줄에는 교차점의 좌표 xx와 yy가 주어진다 (−1000000≤x,y≤1000000-1000000 \le x, y \le 1000000). 교차점의 번호는 입력에 나온 순서대로 11부터 NN까지다. 그다음 MM개 줄에는 구간의 양 끝 교차점 번호 pp와 qq가 주어진다 (1≤p,q≤N1 \le p, q \le N, p≠qp \ne q).

어떤 교차점도 다른 망의 구간 위에 놓이지 않는다.

출력

새로 짓는 구간의 두 끝점 uu와 vv를 출력한다. uu는 Red 망의 교차점 번호, vv는 Blue 망의 교차점 번호이고, 두 점을 잇는 구간은 uu와 vv를 빼면 어느 망의 구간과도 만나지 않는다.

조건을 만족하는 쌍은 여러 개일 수 있으므로 답은 다음 규칙으로 하나만 정한다.

점 PP가 점 QQ보다 높다는 것은 PP의 yy좌표가 더 크거나, yy좌표가 같고 xx좌표가 더 크다는 뜻이다. 두 망의 모든 교차점 가운데 가장 높은 점을 tt라 하고, tt가 속하지 않은 망에서 가장 높은 교차점을 bb라 하자. tt가 속한 망의 교차점 aa 가운데 bb보다 높으면서 위 조건대로 bb와 이을 수 있는 점만 생각한다. 그런 aa는 항상 존재한다. 이 가운데 bb에서 aa로 향하는 벡터가 xx축 양의 방향과 이루는 반시계 방향 각이 가장 작은 점을 고른다. 이 각은 항상 00도 이상 180180도 미만이다. 각이 같은 점이 둘 이상이면 bb에 더 가까운 점을 고른다. 이렇게 정해진 쌍에서 Red 망의 번호를 먼저, Blue 망의 번호를 나중에 출력한다.

힌트

그림은 예제의 두 망과, 규칙이 고르는 연결 구간을 점선으로 보여준다.

예제2

  1. 예제 1

    입력
    5 6
    0 3
    1 1
    6 0
    5 3
    9 8
    1 2
    1 3
    4 3
    3 5
    1 5
    2 3
    4 4
    6 4
    4 4
    4 2
    2 3
    1 2
    4 2
    2 3
    3 4
    
    예상 출력
    5 1
    
  2. 예제 2

    입력
    2 1
    0 0
    0 1
    1 2
    2 1
    5 0
    5 1
    1 2
    
    예상 출력
    2 2