반 나누기 (Hard)

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

요약
볼록다각형을 한 직선으로 잘라 넓이와 둘레가 모두 같은 두 조각으로 나눌 수 있는지 판정하고, 가능하면 자르는 두 점을 변 번호와 내분 비율로 출력한다.
난이도

어려움10점 중 8점

유형
기하, 이분 탐색, 투 포인터, 누적 합
정답자
아직 제출이 없습니다

문제

루타비스의 수호자, 시간술사 반반은 모든 음식을 반으로 먹는 것을 즐깁니다. 비록 후라이드 양념 반반 치킨을 먹지는 않지만, 중식은 항상 짬짜면을, 피자집에서는 항상 하프 앤 하프 피자를 주문합니다.

생일을 맞은 반반은 그의 동료인 어릿광대 피에르에게서 볼록다각형 모양의 케이크를 하나 선물받았습니다. 반반은 이 케이크를 일직선으로 한 번 잘라서 반으로 나눠 먹고 싶습니다. 특히 나눠진 후의 케이크 밑면의 면적과 둘레가 똑같도록 하고 싶습니다.

반반이 원하는 대로 케이크를 두 조각으로 나눌 수 있을까요?

입력

첫 줄에는 반반이 선물받은 케이크 밑면의 모양인 볼록다각형의 꼭짓점 개수 NN이 주어집니다. (3≤N≤200,000)(3 \le N \le 200\\,000)

다음 NN개의 줄의 ii번째 줄에는 볼록다각형의 ii번째 점의 좌표를 의미하는 두 정수 x_i,y_ix\_i, y\_i가 공백으로 구분되어 주어집니다. (−107≤x_i,y_i≤107)(-10^7 \le x\_i, y\_i \le 10^7)

꼭짓점은 다각형의 어느 한 점에서 시작해서 반시계방향으로 주어지며, 서로 다른 세 점이 한 직선 위에 있는 경우는 없습니다.

출력

첫 줄에, 케이크를 넓이와 둘레가 같은 두 도형으로 분할할 수 있다면 YES, 없다면 NO를 출력하세요.

첫 줄에 YES를 출력한 경우, 칼질을 시작하고 끝내는 두 점이 각각 x_jx\_j와 x_j+1x\_{j+1}의 α:1−α\alpha : 1-\alpha 내분점, x_kx\_k와 x_k+1x\_{k+1}의 β:1−β\beta: 1-\beta 내분점인 경우, 둘째 줄에 jj와 α\alpha를 공백으로 구분하여, 셋째 줄에 kk와 β\beta를 공백으로 구분하여 출력하세요. 이 때, x_N+1=x_1x\_{N+1} = x\_1이라고 생각합니다. (1≤j,k≤N;(1 \le j, k \le N; 0≤α,β≤1)0 \le \alpha, \beta \le 1)

두 점을 이은 선분을 기준으로 볼록다각형을 나누었을 때, 나뉜 두 도형의 넓이와 둘레의 절대 혹은 상대 오차가 10−610^{-6} 이하여야 합니다.

힌트

두 점 (a,b)(a, b)와 (c,d)(c, d)의 t:1−tt:1-t 내분점은 (a(1−t)+ct,b(1−t)+dt)(a(1-t)+ct, b(1-t)+dt)입니다.

예제2

  1. 예제 1

    입력
    3
    0 0
    10 0
    5 10
    
    예상 출력
    YES
    1 0.500000000000
    2 1.000000000000
    
  2. 예제 2

    입력
    4
    4 0
    10 10
    0 7
    0 6
    
    예상 출력
    YES
    1 0.918970085714
    4 0.384322207567