인쇄 회로 기판

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

요약
단순 폴리곤과 외부의 원점이 주어질 때, 폴리곤의 어느 변과도 교차하지 않고 원점과 직선으로 연결할 수 있는 꼭짓점을 모두 찾는 문제입니다.
난이도

어려움10점 중 8점

유형
기하, 정렬, 분할 정복
정답자
아직 제출이 없습니다

문제

인쇄 회로 기판(PCB)은 부도체 기판 위에 얇게 붙인 구리 판을 깎아 만든 도선으로 전자 부품들을 기계적으로 지지하고 전기적으로 연결하는 판이다.

어느 회사가 PCB 위에 새 전자 기기를 만들려고 한다. 설계는 일부만 완성되어 있으며, 11번부터 NN번까지 번호가 매겨진 NN개의 노드로 이루어진 닫힌 다각형 모양이다. 모든 ii에 대해 노드 ii와 노드 i+1i+1은 직선 도선으로 이어져 있고, 노드 NN은 다시 노드 11과 이어져 있다. 도선들은 서로 교차하지 않는다. 즉 두 도선이 한 점을 공유한다면 그 점은 두 도선 모두의 끝점이며, 각 노드는 정확히 두 도선의 끝점이다. 각 노드의 위치는 정수 좌표 (x,y)(x, y)로 주어지고, 원점 (0,0)(0, 0)은 기판의 왼쪽 아래 모서리로 다각형 바깥에 있다.

원점과 어떤 노드를 직선 도선으로 이었을 때 그 도선이 다각형과 오직 그 노드에서만 만나는 노드를 모두 찾는 프로그램을 작성하시오.

입력

첫째 줄에 노드의 개수 NN (1≤N≤2000001 \le N \le 200000)이 주어진다.

다음 NN개의 줄 중 i+1i+1번째 줄에는 노드 ii의 좌표를 나타내는 두 정수 xx, yy (0<x,y≤10000000 < x, y \le 1000000)가 주어진다.

출력

첫째 줄에, 원점과 직선 도선으로 이었을 때 그 도선이 다각형과 오직 그 노드에서만 만나는 노드의 개수 MM을 출력한다.

둘째 줄에, 그러한 노드들의 번호를 오름차순으로 공백 하나로 구분하여 출력한다.

힌트

예제3

  1. 예제 1

    입력
    11
    7 6
    4 4
    3 2
    1 3
    9 9
    13 4
    8 1
    6 4
    9 5
    8 3
    11 5
    
    예상 출력
    3
    3 4 7
    
  2. 예제 2

    입력
    3
    1 1
    5 1
    3 5
    
    예상 출력
    3
    1 2 3
    
  3. 예제 3

    입력
    4
    2 2
    4 2
    4 4
    2 4
    
    예상 출력
    3
    1 2 4