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

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

빈 삼각형

시간 제한2초메모리 제한512 MB

요약
세 직선이 한 점에서 만나지 않는 N개의 직선이 주어질 때, 내부를 다른 직선이 지나지 않는 빈 삼각형의 개수를 센다.
난이도

어려움10점 중 8점

유형
기하, 조합론, 정렬
정답자
아직 제출이 없습니다

문제

아주 단순한 문제를 극도로 어려운 문제로 바꾸는 일은 의외로 쉽습니다. 예를 들어 보겠습니다.

평면 위의 직선 NN개로 삼각형을 몇 개나 만들 수 있을까요? 직선들의 기울기가 모두 다르고 어떤 세 직선도 한 점에서 만나지 않는다면, 만들 수 있는 삼각형은 최대 (N3)\binom{N}{3}개입니다.

여기까지는 그리 어렵지 않습니다. 그런데 이제 빈 삼각형, 즉 내부를 어떤 직선도 지나가지 않는 삼각형만 세어 봅시다. 그러면 그 개수는 갑자기 매우 작아집니다. 예를 들어 직선 44개로 만들 수 있는 삼각형은 최대 44개이지만, 그중 빈 삼각형은 최대 22개뿐입니다(그림 참고).

직선 NN개로 만들 수 있는 빈 삼각형의 최대 개수에 대한 일반적인 공식은 알려져 있지 않으며, 어려운 부분은 직선들을 어떻게 배치하느냐입니다. 여러분이 할 일은 더 쉽습니다. 주어진 직선 NN개가 만드는 빈 삼각형의 개수를 세면 됩니다.

두 개의 빈 삼각형(음영)을 만드는 네 직선.

그림 1: 두 개의 빈 삼각형(음영)을 이루는 네 직선.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 직선의 개수를 나타내는 정수 NN (1≤N≤5001 \le N \le 500)이 주어집니다. 이어지는 NN개의 줄에는 각각 네 정수 x1x_1, y1y_1, x2x_2, y2y_2 (−1000-1000 이상 10001000 이하)가 주어지며, 이는 두 점 (x1,y1)(x_1, y_1)과 (x2,y2)(x_2, y_2)를 지나는 직선을 나타냅니다. 어떤 세 직선도 한 점에서 만나지 않으며, 모든 직선은 서로 다릅니다. 입력의 끝은 N=0N = 0인 줄로 표시되며, 이 줄은 처리하지 않습니다.

출력

각 테스트 케이스마다 주어진 직선들이 만드는 빈 삼각형의 개수를 한 줄에 출력합니다.

예제3

  1. 예제 1

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

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

    입력
    2
    0 0 1 1
    0 1 1 0
    0
    
    예상 출력
    0