종이접기 공리 6: 접는 선의 개수 세기

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

요약
점과 직선 쌍 두 개가 주어질 때, 후지타 여섯 번째 공리를 만족하는 접는 선(두 포물선의 공통 접선) 개수를 최대 2만 개의 테스트케이스에 대해 구합니다.
난이도

어려움10점 중 9점

유형
기하, 수학, 정수론
정답자
아직 제출이 없습니다

문제

종이접기에 대한 최초의 형식적 공리 목록은 후지타 후미아키(Humiaki Huzita)와 베네데토 시메미(Benedetto Scimemi)가 발표했으며, 후지타 공리로 알려져 있다. 각 공리는 점과 선을 맞추어 하나의 접는 선을 만들어 내는 방법을 설명한다. 여섯 개의 공리는 다음과 같다.

  1. 두 점 p1p_1, p2p_2에 대해, 두 점을 모두 지나는 접는 선이 유일하게 존재한다.
  2. 두 점 p1p_1, p2p_2에 대해, p1p_1을 p2p_2 위로 겹치게 하는 접는 선이 유일하게 존재한다.
  3. 두 직선 l1l_1, l2l_2에 대해, l1l_1을 l2l_2 위로 겹치게 하는 접는 선이 존재한다.
  4. 점 p1p_1과 직선 l1l_1에 대해, l1l_1에 수직이면서 p1p_1을 지나는 접는 선이 유일하게 존재한다.
  5. 두 점 p1p_1, p2p_2와 직선 l1l_1에 대해, p1p_1을 l1l_1 위로 겹치게 하면서 p2p_2를 지나는 접는 선이 존재한다.
  6. 두 점 p1p_1, p2p_2와 두 직선 l1l_1, l2l_2에 대해, p1p_1을 l1l_1 위로, p2p_2를 l2l_2 위로 동시에 겹치게 하는 접는 선이 존재한다.

여섯 번째 공리가 가장 어렵다. 하나의 곧은 접는 선이 p1p_1을 직선 l1l_1 위로, 동시에 p2p_2를 직선 l2l_2 위로 반사시켜야 한다. 배치에 따라 그런 접는 선은 하나도 없을 수도 있고, 하나, 둘, 또는 셋 존재할 수도 있다.

각 테스트 케이스마다 여섯 번째 공리를 만족하는 서로 다른 접는 선의 개수를 구하라. 즉, p1p_1을 l1l_1 위로, p2p_2를 l2l_2 위로 동시에 겹치게 하는 서로 다른 직선이 몇 개인지 세어라.

입력

첫 줄에 테스트 케이스의 수 tt (1≤t≤200001 \le t \le 20000)가 주어진다.

각 테스트 케이스는 정확히 네 줄로 주어지며, 순서대로 l1l_1, p1p_1, l2l_2, p2p_2를 나타낸다.

  • 직선은 그 위의 서로 다른 두 점의 좌표인 네 정수 x1 y1 x2 y2x_1\ y_1\ x_2\ y_2로 주어진다.
  • 점은 두 정수 x yx\ y로 주어진다.

모든 좌표는 절댓값이 1010 이하인 정수이다. p1p_1은 l1l_1 위에 있지 않고, p2p_2는 l2l_2 위에 있지 않음이 보장된다. 두 직선 l1l_1과 l2l_2는 서로 다르지만, 두 점 p1p_1과 p2p_2는 같을 수 있다.

출력

각 테스트 케이스마다 한 줄에 정수 하나를 출력한다. p1p_1을 l1l_1 위로, p2p_2를 l2l_2 위로 겹치게 하는 서로 다른 접는 선의 개수이다. 이 값은 항상 00, 11, 22, 33 중 하나이다.

참고

점 pp를 직선 ll 위로 반사시키는 접는 선은 초점이 pp이고 준선이 ll인 포물선의 접선과 정확히 일치한다. 따라서 여섯 번째 공리를 만족하는 접는 선은 포물선 (p1,l1)(p_1, l_1)과 포물선 (p2,l2)(p_2, l_2)의 공통 접선이다. 서로 다른 두 포물선은 최대 세 개의 일반적인 공통 접선을 가지므로, 답은 결코 셋을 넘지 않는다. l1l_1과 l2l_2가 평행하면 공통 접선의 개수가 둘, 하나, 또는 영으로 줄어들 수 있다.

예제4

  1. 예제 1

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

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

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

    입력
    1
    -3 -6 -5 0
    2 0
    0 -5 -3 -5
    -6 3
    
    예상 출력
    1