전략가 공주
시간 제한8초메모리 제한512 MB
일정한 속도로 움직이는 다각형과 각자 날아오는 총알 선분이 처음 닿는 시각을 모두 구합니다.
문제
가난한 나라의 용감한 공주가 성을 몰래 빠져나와 고대의 보물을 손에 넣는 모험을 준비하고 있다. 그러나 보물 주변은 여러 명의 가디언이 지키고 있어서 평범한 방법으로는 다가갈 수 없다. 그래서 공주는 종자인 당신을 미끼로 삼아 가디언들의 주의를 끄는 사이 보물을 가져온다는 작전을 세웠다. 이런 명령을 따르면 목숨이 몇 개라도 모자라겠지만, 공주의 명령을 거역할 수도 없다. 그래서 당신은 미리 정찰을 하고, 가디언의 공격을 피하면서 주의를 끌려면 어떻게 움직여야 하는지 꼼꼼히 조사했다. 당신의 일은 이 조사 결과를 바탕으로, 미끼인 당신과 가디언이 쏜 탄환이 언제, 몇 번 충돌하는지 계산하는 프로그램을 작성하는 것이다.
간단하게 하기 위해, 충분히 높은 곳에서 내려다본 2차원 평면을 생각한다. 당신은 가디언의 공격을 막으려고 갑옷을 입고 있으므로, 당신의 모양은 다각형으로 보아도 된다. 이 다각형의 선분들은 서로 교차하거나 겹치지 않는다. 당신의 이동에 대해서는 다음을 가정해도 좋다.
- 등속 직선 운동만 한다.
- 가속, 감속, 방향 전환은 모두 순간에 이루어진다.
- 회전하지 않으므로 방향은 처음 상태에서 전혀 바뀌지 않는다.
- 다각형의 모든 부분은 항상 y 좌표가 양수인 위치에 있다.
가디언이 쏘는 탄환에 대해서도 다음을 가정해도 좋다.
- 탄환의 굵기는 무시할 수 있다.
- 탄환은 유한한 길이를 가진다.
- 길이 인 탄환이 선두 좌표 에서 속도 벡터 로 발사되면, 탄환의 꼬리 좌표는 다음 지점에 있다. (참고: 발사되는 순간 탄환 선두의 y 좌표는 모두 0이다.)
- 예를 들어, 에서 속도 벡터 , 길이 10인 탄환을 발사하면 꼬리는 에 있다.
- 적 캐릭터가 쏜 탄환끼리의 충돌은 모두 무시한다.
당신과 탄환의 충돌은 다음과 같이 정의한다. 당신을 이루는 다각형과 가디언이 쏜 선분이 처음으로 한 점을 공유하는 시각을 탄환의 충돌 시각으로 한다. 가디언의 탄환이 당신에게 맞더라도 당신은 피해만 입을 뿐 이동에는 지장이 없다. 당신에게 맞은 탄환은 맞은 순간 사라진다. 또, 당신이 초기 위치에서 임의의 방향으로 범위 안에서 평행이동하더라도 충돌 시각은 많아야 만 변한다고 보장된다.
입력
N M B
X1 Y1
...
XN YN
T1 VX1 VY1
...
TM VXM VYM
T'1 X'1 VX'1 VY'1 L1
...
T'B X'B VX'B VY'B LB
각 데이터셋의 첫 줄에는 0 이상의 정수 (), (), ()가 주어진다. 각각 당신을 나타내는 다각형의 꼭짓점 수, 당신의 이동 지시 수, 가디언이 쏜 탄환 수이다.
이어지는 줄에는 시각 0에서의 다각형 꼭짓점 좌표 ()가 순서대로 주어진다. 모든 값은 정수이며 , 을 만족한다.
이어지는 줄에는 이동 지시가 개 주어진다. 번째 지시는 정수 로 이루어지며, 시각 부터 까지 속도 벡터를 로 유지한다는 뜻이다. 여기서 , , 이다. 모든 이동 지시를 마친 뒤(즉 시각 이후)에는 이동을 멈추고 그 자리에 머문다. 멈춘 뒤에도 탄환과 충돌할 수 있으므로, 출력에는 이런 충돌도 포함해야 한다.
이어지는 줄에는 가디언이 쏘는 탄환 개의 정보가 주어진다. 번째 탄환은 정수 로 표현되며, 시각 에 좌표 에서 속도 벡터 로 길이 인 탄환이 발사됨을 뜻한다. 이 값들은 , , , , 을 만족한다.
마지막 데이터셋 뒤에는 "0 0 0"이 적힌 줄이 주어진다. 이 줄은 데이터셋이 아니다.
출력
각 데이터셋마다 첫 줄에 당신이 가디언의 탄환에 맞은 횟수 을 출력한다. 이어지는 줄에는 맞은 시각을 오름차순으로, 오차 0.001 이하의 정밀도로 출력한다.