두 각기둥의 교집합

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

요약
축이 서로 수직인 두 무한 각기둥의 교차 부피를 다각형 단면으로부터 정확한 유리수 분수로 계산합니다.
난이도

어려움10점 중 8점

유형
기하, 수학, 시뮬레이션
정답자
아직 제출이 없습니다

문제

P1P_1은 축이 zz축과 평행한 무한히 높은 각기둥이고, P2P_2는 축이 yy축과 평행한 무한히 높은 각기둥이라고 하자. P1P_1은 P1P_1과 xyxy평면의 단면인 다각형 C1C_1으로 정의되고, P2P_2는 P2P_2와 xzxz평면의 단면인 다각형 C2C_2로 정의된다.

그림 I.1은 예제 입력의 첫 번째 데이터셋으로 나오는 두 단면을 보여주고, 그림 I.2는 각기둥과 그 단면 사이의 관계를 보여준다.

C1C_1: P1P_1과 xyxy평면의 단면(왼쪽). C2C_2: P2P_2와 xzxz평면의 단면(오른쪽).

그림 I.1: 각기둥의 단면.

P1P_1과 C1C_1(왼쪽). P2P_2와 C2C_2(오른쪽).

그림 I.2: 각기둥과 그 단면.

그림 I.3: 두 각기둥의 교집합.

그림 I.3은 그림 I.2의 두 각기둥, 즉 P1P_1과 P2P_2의 교집합을 보여준다.

두 각기둥의 교집합의 부피를 계산하는 프로그램을 작성하시오.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 데이터셋의 수는 200200개 미만이다.

각 데이터셋의 형식은 다음과 같다.

m n
x11 y11
x12 y12
...
x1m y1m
x21 z21
x22 z22
...
x2n z2n

mm과 nn은 각각 다각형 C1C_1과 C2C_2의 꼭짓점 수를 나타내는 정수이다 (3≤m≤1003 \le m \le 100, 3≤n≤1003 \le n \le 100).

x1ix_{1i}, y1iy_{1i}, x2jx_{2j}, z2jz_{2j}는 −100-100 이상 100100 이하의 정수이다. (x1i,y1i)(x_{1i}, y_{1i})와 (x2j,z2j)(x_{2j}, z_{2j})는 각각 C1C_1의 ii번째 꼭짓점과 C2C_2의 jj번째 꼭짓점의 위치이다.

이 꼭짓점 위치들의 수열은 그림 I.1과 같이 xyxy평면 또는 xzxz평면 위에서 반시계 방향으로 주어진다.

모든 다각형은 볼록하다고 가정해도 좋다. 즉, 각 다각형의 모든 내각은 180도보다 작다. 또한 모든 다각형은 단순하다고 가정해도 좋다. 즉, 각 다각형의 경계는 자기 자신과 교차하거나 닿지 않는다.

입력의 끝은 두 개의 0으로 이루어진 줄로 표시된다.

출력

각 데이터셋에 대해, 두 각기둥 P1P_1과 P2P_2의 교집합의 정확한 부피를 한 줄에 출력한다. 모든 꼭짓점 좌표가 정수이므로 이 부피는 항상 유리수이다. 이를 기약분수 p/q 형태로 출력하며, 여기서 q>0q > 0이고 pp와 qq는 11보다 큰 공약수를 가지지 않는다(부피가 정수 VV이면 V/1로, 부피가 0이면 0/1로 쓴다). 다른 문자는 출력하지 않는다.

예제1

  1. 예제 1

    입력
    4 3
    7 2
    3 3
    0 2
    3 1
    4 2
    0 1
    8 1
    4 4
    30 2
    30 12
    2 12
    2 2
    15 2
    30 8
    13 14
    2 8
    8 5
    13 5
    21 7
    21 9
    18 15
    11 15
    6 10
    6 8
    8 5
    10 12
    5 9
    15 6
    20 10
    18 12
    3 3
    5 5
    10 3
    10 10
    20 8
    10 15
    10 8
    4 4
    -98 99
    -99 -99
    99 -98
    99 97
    -99 99
    -98 -98
    99 -99
    96 99
    0 0
    
    예상 출력
    113/24
    1680/1
    9823/20
    0/1
    2994501843/394