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

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

주조 (Casting)

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

요약
볼록 다각형에서 두 꼭짓점을 잇는 직선이 다각형을 나눌 때, 두 조각 모두 평행이동으로 빼낼 수 있는 꼭짓점 쌍의 개수를 센다.
난이도

어려움10점 중 9점

유형
기하, 투 포인터, 수학, 구현
정답자
아직 제출이 없습니다

문제

주조(casting)는 만들려는 물체 모양의 빈 공간이 있는 거푸집(cast)에 액체를 부어 굳힌 뒤 거푸집을 떼어 내는 제조 공정이다. 같은 거푸집을 재사용하여 물체를 대량 생산하려면, 거푸집과 물체를 모두 손상하지 않고 거푸집을 물체에서 떼어 낼 수 있어야 한다.

물체가 볼록 다각형 PP일 때, PP의 두 꼭짓점을 지나는 직선을 따라 거푸집을 두 조각으로 나눈다. 목표는, 두 조각을 각각 평행 이동만으로 (거푸집 조각과 물체를 모두 손상하지 않고) 떼어 낼 수 있게 하는 꼭짓점 쌍을 찾는 것이다. 예를 들어 원 문제의 그림에서는 어떤 두 꼭짓점을 지나는 직선으로 나누면 위쪽 조각은 위로, 아래쪽 조각은 아래로 빼낼 수 있지만, 다른 어떤 두 꼭짓점을 지나는 직선으로 나누면 한쪽 조각이 물체를 감싸 버려 어떤 방향으로도 떼어 낼 수 없다. 즉, 모든 꼭짓점 쌍이 이런 분할을 허용하지는 않는다. (각 조각은 서로 다른 평행 이동 방향으로 빼내도 되며, 나누는 직선에 수직인 방향으로만 빼낼 수 있어야 하는 것은 아니다.)

nn개의 꼭짓점을 가진 볼록 다각형 PP가 주어질 때, (vi,vj)(v_i, v_j)를 지나는 직선으로 나눈 두 거푸집 조각을 모두 평행 이동으로 떼어 낼 수 있는 꼭짓점 쌍 (vi,vj)(v_i, v_j)를 모두 찾는 프로그램을 작성하라.

입력

입력은 표준 입력으로 주어진다. 첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스의 첫 줄에는 볼록 다각형 PP의 꼭짓점 수 nn이 주어지며 3≤n≤100,0003 \le n \le 100{,}000이다. 다음 줄에는 2n2n개의 정수 x1 y1 x2 y2 … xn ynx_1\ y_1\ x_2\ y_2\ \dots\ x_n\ y_n이 주어지는데, xix_i와 yiy_i는 각각 꼭짓점 viv_i의 xx좌표와 yy좌표이다. 모든 좌표는 정수이며 −1,000,000,000≤xi,yi≤1,000,000,000-1{,}000{,}000{,}000 \le x_i, y_i \le 1{,}000{,}000{,}000이다. 꼭짓점 v1,v2,…,vnv_1, v_2, \dots, v_n은 PP의 경계를 따라 시계 방향으로 주어진다.

출력

출력은 표준 출력으로 한다. 각 테스트 케이스에 대해, (vi,vj)(v_i, v_j)를 지나는 직선으로 나눈 두 거푸집 조각을 모두 평행 이동으로 떼어 낼 수 있는, i<ji < j인 꼭짓점 쌍 (vi,vj)(v_i, v_j)의 개수를 한 줄에 출력한다.

예제2

  1. 예제 1

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

    입력
    1
    3
    0 0 3 3 6 0
    
    예상 출력
    3