종이접기 공리 6: 접는 선의 개수 세기
시간 제한1초메모리 제한512 MB
점과 직선 쌍 두 개가 주어질 때, 후지타 여섯 번째 공리를 만족하는 접는 선(두 포물선의 공통 접선) 개수를 최대 2만 개의 테스트케이스에 대해 구합니다.
문제
종이접기에 대한 최초의 형식적 공리 목록은 후지타 후미아키(Humiaki Huzita)와 베네데토 시메미(Benedetto Scimemi)가 발표했으며, 후지타 공리로 알려져 있다. 각 공리는 점과 선을 맞추어 하나의 접는 선을 만들어 내는 방법을 설명한다. 여섯 개의 공리는 다음과 같다.
- 두 점 , 에 대해, 두 점을 모두 지나는 접는 선이 유일하게 존재한다.
- 두 점 , 에 대해, 을 위로 겹치게 하는 접는 선이 유일하게 존재한다.
- 두 직선 , 에 대해, 을 위로 겹치게 하는 접는 선이 존재한다.
- 점 과 직선 에 대해, 에 수직이면서 을 지나는 접는 선이 유일하게 존재한다.
- 두 점 , 와 직선 에 대해, 을 위로 겹치게 하면서 를 지나는 접는 선이 존재한다.
- 두 점 , 와 두 직선 , 에 대해, 을 위로, 를 위로 동시에 겹치게 하는 접는 선이 존재한다.
여섯 번째 공리가 가장 어렵다. 하나의 곧은 접는 선이 을 직선 위로, 동시에 를 직선 위로 반사시켜야 한다. 배치에 따라 그런 접는 선은 하나도 없을 수도 있고, 하나, 둘, 또는 셋 존재할 수도 있다.
각 테스트 케이스마다 여섯 번째 공리를 만족하는 서로 다른 접는 선의 개수를 구하라. 즉, 을 위로, 를 위로 동시에 겹치게 하는 서로 다른 직선이 몇 개인지 세어라.
입력
첫 줄에 테스트 케이스의 수 ()가 주어진다.
각 테스트 케이스는 정확히 네 줄로 주어지며, 순서대로 , , , 를 나타낸다.
- 직선은 그 위의 서로 다른 두 점의 좌표인 네 정수 로 주어진다.
- 점은 두 정수 로 주어진다.
모든 좌표는 절댓값이 이하인 정수이다. 은 위에 있지 않고, 는 위에 있지 않음이 보장된다. 두 직선 과 는 서로 다르지만, 두 점 과 는 같을 수 있다.
출력
각 테스트 케이스마다 한 줄에 정수 하나를 출력한다. 을 위로, 를 위로 겹치게 하는 서로 다른 접는 선의 개수이다. 이 값은 항상 , , , 중 하나이다.
참고
점 를 직선 위로 반사시키는 접는 선은 초점이 이고 준선이 인 포물선의 접선과 정확히 일치한다. 따라서 여섯 번째 공리를 만족하는 접는 선은 포물선 과 포물선 의 공통 접선이다. 서로 다른 두 포물선은 최대 세 개의 일반적인 공통 접선을 가지므로, 답은 결코 셋을 넘지 않는다. 과 가 평행하면 공통 접선의 개수가 둘, 하나, 또는 영으로 줄어들 수 있다.