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

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

단순 다각형

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

요약
최대 40,000개의 점으로 이루어진 닫힌 다각형의 변들이 공유 끝점에서만 만나는지, 아니면 어딘가에서 교차하는지 판정한다.
난이도

어려움10점 중 8점

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

문제

평면 위의 점 p1,p2,…,pnp_1, p_2, \dots, p_n 으로 정의되는 다각형 PP 는, 선분(변이라고 부른다) p1p2,p2p3,…,pnp1p_1p_2, p_2p_3, \dots, p_np_1 이 차례로 이어져 만드는 닫힌 사슬이다. 다각형 PP 가 단순(simple) 하다는 것은 어떤 두 변도 공통점을 가지지 않는다는 뜻이다. 단, 이웃한(연속한) 두 변이 공유하는 하나의 점(꼭짓점이라고 부른다)만은 예외로 허용된다. 다만 어떤 꼭짓점이 그 두 변 이외의 (제3의) 변 위에도 놓인다면, 그 다각형은 더 이상 단순하지 않다.

단순하지 않은 다각형을 자기 교차(self-intersecting) 다각형이라고 한다.

주어진 다각형이 단순한지, 아니면 자기 교차하는지를 판정하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 하나의 다각형에 대응한다. 각 테스트 케이스의 첫 줄에는 점의 개수 NN (1≤N≤40 0001 \le N \le 40\,000) 이 주어진다. 이어지는 NN 개의 줄에는 각 점 PiP_i 의 좌표 XiX_i 와 YiY_i 가 공백으로 구분되어 주어진다 (1≤Xi,Yi≤30 0001 \le X_i, Y_i \le 30\,000). 점들은 다각형을 이루는 순서대로 주어진다.

마지막 테스트 케이스 다음에는 00 하나만 있는 줄이 주어지며, 이 줄은 입력의 끝을 나타낸다.

출력

각 테스트 케이스마다 한 줄에, 다각형이 단순하면 YES 를, 자기 교차하면 NO 를 출력하여라.

예제3

  1. 예제 1

    입력
    5
    1 6
    5 7
    9 4
    2 3
    6 1
    7
    1 6
    5 7
    9 4
    4 3
    7 4
    4 6
    3 1
    7
    1 1
    1 4
    1 3
    2 2
    3 1
    3 3
    2 2
    0
    
    예상 출력
    NO
    YES
    NO
    
  2. 예제 2

    입력
    4
    1 1
    1 5
    5 5
    5 1
    0
    
    예상 출력
    YES
    
  3. 예제 3

    입력
    4
    1 1
    5 5
    1 5
    5 1
    0
    
    예상 출력
    NO