회전체와 쿼리

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

요약
볼록 다각형을 한 현으로 나눌 때 생기는 두 다각형을 그 현을 축으로 회전시켜 얻는 두 회전체 중 작은 부피를 각 쿼리마다 구한다.
난이도

어려움10점 중 9점

유형
기하, 누적 합, 수학, 구현
정답자
아직 제출이 없습니다

문제

11번 점부터 NN번 점까지 반시계 방향으로 번호가 매겨져 있는 점들을 이어 만든 볼록 다각형이 있을 때, 다음 쿼리를 수행하는 프로그램을 작성해 보자.

  • ii jj: ii번 점과 jj번 점을 잇는 선분으로 볼록 다각형을 분할한다. 분할한 두 다각형에 대해 두 점을 지나는 직선을 기준으로 회전시켜 생긴 회전체를 각각 AA, BB라고 하자. AA와 BB 중 부피가 작은 회전체의 부피를 출력한다. 만약 두 개의 다각형으로 분할되지 않는다면 0을 출력한다. (i≠j)(i \ne j)

입력

첫째 줄에 볼록 다각형의 꼭짓점을 포함하여 변에 위치한 점 NN개가 주어진다.

둘째 줄부터 NN개의 줄에 걸쳐 각 점의 좌표 (x_i,y_i)(x\_i, y\_i)를 나타내는 두 정수 x_ix\_i, y_iy\_i가 공백으로 구분되어 주어진다. NN개의 점은 반시계 방향으로 주어진다. 연속한 세 점이 일직선 위에 놓일 수도 있음에 유의하라.

N+2N+2째 줄에 쿼리의 개수 QQ가 주어진다.

N+3N+3째 줄부터 QQ개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어진다.

출력

각 줄에 쿼리의 답을 한 줄에 하나씩 순서대로 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10−610^{-6} 이하이면 정답이다.

제한

  • 3≤N≤100,0003 \leq N \leq 100\\,000
  • −106≤x_i,y_i≤106-10^6 \leq x\_i, y\_i \leq 10^6 (1≤i≤N)(1 \leq i \leq N)
  • 1≤Q≤100,0001 \leq Q \leq 100\\,000

힌트

볼록 다각형은 모든 내각이 00도보다 크고 180180도와 같거나 작은 단순 다각형이다.

예제2

  1. 예제 1

    입력
    4
    0 0
    1 0
    2 0
    1 3
    2
    2 4
    1 3
    
    예상 출력
    3.1415926536
    0
    
  2. 예제 2

    입력
    5
    0 0
    2 0
    2 2
    0 2
    0 1
    2
    1 3
    2 5
    
    예상 출력
    5.9238439175
    1.8732839283