판 위의 기어
시간 제한1초메모리 제한128 MB
모터에서 시작해 같은 레벨의 링이 맞닿는 관계로 회전 방향과 속도를 전파하고, 겹침 오류나 회전 충돌 오류를 판정한다.
문제
엔지니어링 회사 "Gears R Us"는 판(board) 위에서 기어들이 어떻게 도는지 계산하는 프로그램을 필요로 한다. 판은 2차원 장착 평면이다. 모든 기어는 두 층의 톱니를 가진다. 판에 가까운 쪽의 안쪽(inner) 층은 반지름이 이고, 판에서 먼 쪽의 바깥쪽(outer) 층은 반지름이 이다. 기어는 축의 중심을 기준으로 회전하며, 한 기어의 두 층은 항상 같은 각속도로 돈다.
두 기어는 한 기어의 어떤 층 링이 다른 기어의 링과 같은 층에서 정확히 맞닿을 때에만 맞물린다. 즉 안쪽은 안쪽끼리, 바깥쪽은 바깥쪽끼리 맞닿는다. 맞닿는 지점에서 두 링의 접선 속도는 같으므로, 구동되는 기어는 구동하는 기어와 반대 방향으로 돈다. 접선 속도 가 접점에서 같으므로, 각속도 로 도는 기어가 반지름 인 링을 통해 반지름 인 링을 구동하면 그 각속도는 가 된다.
판은 정사각형이며, 1 cm 간격으로 개의 장착 구멍이 격자로 뚫려 있다. 왼쪽 아래 구멍이 이고 오른쪽 위 구멍이 이다. 기어는 구멍 위에만 장착되고, 각 반지름은 1 이상 100 이하의 정수이다. 모터(motor) 는 판 위의 유일한 동력원으로, 판 뒤쪽에서 동력을 받지만 그 밖에는 위의 모든 규칙을 따르는 평범한 기어이다.

프로그램은 두 가지 오류 상황도 판정해야 한다. 겹침 오류는 두 개 이상의 기어가 안쪽 링끼리 또는 바깥쪽 링끼리 겹칠 때 발생한다(정확히 맞닿는 것은 허용되지만 겹치는 것은 허용되지 않는다). 충돌 오류는 어떤 기어가 서로 다른 두 가지 이상의 속도 또는 방향으로 구동될 때 발생한다. 다만 여러 기어가 한 기어를 같은 속도와 같은 방향으로 구동하는 것은 정상이다. 두 오류가 동시에 존재하면 겹침 오류를 보고한다.
모터에 연결되지 않은 기어는 절대 돌지 않으며(회전량 ), 이는 공회전(idle) 경고로 보고한다.
입력
입력은 파일 끝까지 이어지는, 개수가 정해지지 않은 여러 개의 구성으로 이루어진다.
각 구성은 여섯 개의 정수로 된 한 줄로 시작한다.
- -- 모터의 좌표 ();
- -- 모터의 안쪽 반지름과 바깥쪽 반지름 ();
- -- 모터의 회전 속도(RPM, ; 음수는 반시계 방향, 양수는 시계 방향);
- -- 모터를 제외한, 판 위 기어의 개수 ().
이어지는 개의 줄은 기어 1번부터 번까지를 차례로 나타내며, 각 줄은 네 개의 정수 (좌표, )와 (안쪽·바깥쪽 반지름, )로 이루어진다.
출력
각 구성에 대해 결과 블록을 출력한다.
첫 줄은 Simulation #X이며, X는 1부터 시작하는 구성 번호이다(번호는 Simulation # 바로 뒤인 13번째 칸에서 시작한다).
오류가 없으면 기어 1번부터 번까지 각 기어마다 한 줄씩 출력한다.
- 기어 번호를 1-2번째 칸에 오른쪽 정렬로 출력;
- 3번째 칸에 콜론
:; - 5번째 칸에, 반시계 방향이면
L, 시계 방향이면R; - 7번째 칸부터 회전량의 크기(RPM)를 항상 소수점 아래 두 자리로 출력.
기어의 회전량 크기가 0이면, 방향과 크기 대신 5번째 칸부터 Warning -- Idle Gear를 출력한다.
오류가 있으면 Simulation #X 줄 다음에 오류 메시지 하나만 1번째 칸부터 출력한다. 겹침이면 Error -- Overlapping Gears, 충돌이면 Error -- Conflicting Gear Rotation이다. 겹침 오류가 우선한다.
각 구성 블록 뒤에는 빈 줄을 한 줄 출력한다.