강의실 스크린

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

요약
단순 다각형 강의실과 관찰자 위치, 그리고 방향이 있는 여러 스크린이 주어질 때, 벽에 가려진 부분을 제외하고 보이는 콘텐츠 비율의 합집합을 구한다.
난이도

어려움10점 중 8점

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

문제

많은 강의실은 같은 화면을 여러 대의 디스플레이에 동시에 띄웁니다. 기둥이나 앞사람의 머리가 한 화면을 완전히 가리더라도 다른 화면으로 내용을 볼 수 있게 하기 위해서입니다. 그렇다면 앉은 자리에 따라 발표 내용을 실제로 얼마나 볼 수 있을까요?

다음과 같이 모형화합니다. 사람의 머리는 무시하고 건물 구조에 의한 가림만 고려합니다. 강의실은 닫힌 단순 다각형으로 주어지며(벽은 서로 교차하지 않습니다), 평면 위의 여러 스크린이 선분으로, 그리고 다각형 내부의 내 위치가 함께 주어집니다.

모든 스크린은 같은 내용을 보여 주며, 그 내용은 스크린의 왼쪽 끝(내용의 0%)에서 오른쪽 끝(100%)까지 걸쳐 있습니다. 내 위치에서는 어떤 스크린을 전부, 일부만, 또는 전혀 보지 못할 수 있습니다. 볼 수 있는 부분을 모두 합쳤을 때(합집합) 얻는 내용의 총 비율을 구합니다. 예를 들어 한 스크린의 왼쪽 절반과 다른 스크린의 오른쪽 절반을 본다면 100%를 보는 것이고, 두 스크린의 왼쪽 절반만 본다면 50%만 보는 것입니다.

스크린은 앞면에서만 읽을 수 있습니다. 각 스크린은 왼쪽 끝에서 오른쪽 끝으로 향하는 방향을 가지며, 뒤에서 보면(오른쪽이 내 왼쪽에 오도록 보이면) 그 내용은 전혀 보이지 않습니다.

그림에서 굵은 선은 강의실의 벽입니다. 화살표는 스크린이며 왼쪽에서 오른쪽 방향을 가리킵니다. 회색 영역은 시야 범위이고, 시야가 화살표와 만나는 부분이 그 스크린에서 볼 수 있는 영역입니다. 사람 아래쪽 스크린은 방향이 반대여서 보이지 않습니다. 이 예시에서는 내용의 90%(가장 왼쪽 10%를 제외한 전부)를 볼 수 있습니다.

입력

첫 줄에 데이터 집합의 개수 K≥1K \ge 1이 주어집니다. 이어서 다음 형식의 데이터 집합이 KK개 주어집니다.

각 데이터 집합의 첫 줄에는 nn, mm, xx, yy가 주어집니다. 3≤n≤1003 \le n \le 100은 다각형의 꼭짓점 개수, 1≤m≤201 \le m \le 20은 스크린의 개수, (x,y)(x, y)는 내 좌석 위치입니다(xx와 yy는 실수).

다음 nn개의 줄에는 각각 두 실수 xix_i, yiy_i가 주어지며, 강의실의 ii번째 꼭짓점입니다. 모든 ii에 대해 (xi,yi)(x_i, y_i)에서 (xi+1,yi+1)(x_{i+1}, y_{i+1})로 벽이 있고, (xn,yn)(x_n, y_n)에서 (x1,y1)(x_1, y_1)로도 벽이 있습니다.

이어지는 mm개의 줄에는 각각 네 실수 ℓxj\ell x_j, ℓyj\ell y_j, rxjrx_j, ryjry_j가 주어지며, jj번째 스크린의 왼쪽 끝점 (ℓxj,ℓyj)(\ell x_j, \ell y_j)과 오른쪽 끝점 (rxj,ryj)(rx_j, ry_j)의 좌표입니다.

출력

각 데이터 집합마다 먼저 "Data Set x:"를 한 줄에 출력합니다(xx는 1부터 시작하는 집합 번호). 그다음 볼 수 있는 내용의 비율을 소수점 아래 둘째 자리까지 반올림하여 출력하고, 끝에 퍼센트 기호(%)를 붙입니다.

예제6

  1. 예제 1

    입력
    1
    11 3 2 5
    0 6
    3 6
    1 9
    4 8
    8 9
    6 6
    8 8
    8 2
    6 5
    4 2
    0 3
    2 8 7 8
    7 6.5 7 4
    1 3 4 3
    
    예상 출력
    Data Set 1:
    90.00%
    
  2. 예제 2

    입력
    1
    4 1 5 1
    0 0
    10 0
    10 10
    0 10
    2 5 8 5
    
    예상 출력
    Data Set 1:
    100.00%
    
  3. 예제 3

    입력
    1
    4 1 5 9
    0 0
    10 0
    10 10
    0 10
    2 5 8 5
    
    예상 출력
    Data Set 1:
    0.00%
    
  4. 예제 4

    입력
    1
    4 1 6 1
    2 0
    10 0
    10 10
    2 10
    0 5 10 5
    
    예상 출력
    Data Set 1:
    80.00%
    
  5. 예제 5

    입력
    1
    4 2 5 1
    0 0
    10 0
    10 10
    0 10
    2 5 8 5
    2 5 8 5
    
    예상 출력
    Data Set 1:
    100.00%
    
  6. 예제 6

    입력
    2
    4 1 5 1
    0 0
    10 0
    10 10
    0 10
    2 5 8 5
    4 1 5 9
    0 0
    10 0
    10 10
    0 10
    2 5 8 5
    
    예상 출력
    Data Set 1:
    100.00%
    Data Set 2:
    0.00%