아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

판 위의 기어

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

요약
모터에서 시작해 같은 레벨의 링이 맞닿는 관계로 회전 방향과 속도를 전파하고, 겹침 오류나 회전 충돌 오류를 판정한다.
난이도

보통10점 중 7점

유형
그래프, BFS, 기하, 시뮬레이션
정답자
아직 제출이 없습니다

문제

엔지니어링 회사 "Gears R Us"는 판(board) 위에서 기어들이 어떻게 도는지 계산하는 프로그램을 필요로 한다. 판은 2차원 장착 평면이다. 모든 기어는 두 층의 톱니를 가진다. 판에 가까운 쪽의 안쪽(inner) 층은 반지름이 irir이고, 판에서 먼 쪽의 바깥쪽(outer) 층은 반지름이 oror이다. 기어는 축의 중심을 기준으로 회전하며, 한 기어의 두 층은 항상 같은 각속도로 돈다.

두 기어는 한 기어의 어떤 층 링이 다른 기어의 링과 같은 층에서 정확히 맞닿을 때에만 맞물린다. 즉 안쪽은 안쪽끼리, 바깥쪽은 바깥쪽끼리 맞닿는다. 맞닿는 지점에서 두 링의 접선 속도는 같으므로, 구동되는 기어는 구동하는 기어와 반대 방향으로 돈다. 접선 속도 v=ωrv = \omega r가 접점에서 같으므로, 각속도 ωA\omega_A로 도는 기어가 반지름 rAr_A인 링을 통해 반지름 rBr_B인 링을 구동하면 그 각속도는 ωB=ωA⋅rA/rB\omega_B = \omega_A \cdot r_A / r_B가 된다.

판은 정사각형이며, 1 cm 간격으로 300×300300 \times 300개의 장착 구멍이 격자로 뚫려 있다. 왼쪽 아래 구멍이 x=1,y=1x = 1, y = 1이고 오른쪽 위 구멍이 x=300,y=300x = 300, y = 300이다. 기어는 구멍 위에만 장착되고, 각 반지름은 1 이상 100 이하의 정수이다. 모터(motor) 는 판 위의 유일한 동력원으로, 판 뒤쪽에서 동력을 받지만 그 밖에는 위의 모든 규칙을 따르는 평범한 기어이다.

board diagram

프로그램은 두 가지 오류 상황도 판정해야 한다. 겹침 오류는 두 개 이상의 기어가 안쪽 링끼리 또는 바깥쪽 링끼리 겹칠 때 발생한다(정확히 맞닿는 것은 허용되지만 겹치는 것은 허용되지 않는다). 충돌 오류는 어떤 기어가 서로 다른 두 가지 이상의 속도 또는 방향으로 구동될 때 발생한다. 다만 여러 기어가 한 기어를 같은 속도와 같은 방향으로 구동하는 것은 정상이다. 두 오류가 동시에 존재하면 겹침 오류를 보고한다.

모터에 연결되지 않은 기어는 절대 돌지 않으며(회전량 0.000.00), 이는 공회전(idle) 경고로 보고한다.

입력

입력은 파일 끝까지 이어지는, 개수가 정해지지 않은 여러 개의 구성으로 이루어진다.

각 구성은 여섯 개의 정수로 된 한 줄로 시작한다.

  • x yx\ y -- 모터의 좌표 (1≤x,y≤3001 \le x, y \le 300);
  • ir orir\ or -- 모터의 안쪽 반지름과 바깥쪽 반지름 (1≤ir,or≤1001 \le ir, or \le 100);
  • AVAV -- 모터의 회전 속도(RPM, 1≤∣AV∣≤10001 \le |AV| \le 1000; 음수는 반시계 방향, 양수는 시계 방향);
  • NGNG -- 모터를 제외한, 판 위 기어의 개수 (1≤NG≤201 \le NG \le 20).

이어지는 NGNG개의 줄은 기어 1번부터 NGNG번까지를 차례로 나타내며, 각 줄은 네 개의 정수 x yx\ y(좌표, 1≤x,y≤3001 \le x, y \le 300)와 ir orir\ or(안쪽·바깥쪽 반지름, 1≤ir,or≤1001 \le ir, or \le 100)로 이루어진다.

출력

각 구성에 대해 결과 블록을 출력한다.

첫 줄은 Simulation #X이며, X는 1부터 시작하는 구성 번호이다(번호는 Simulation # 바로 뒤인 13번째 칸에서 시작한다).

오류가 없으면 기어 1번부터 NGNG번까지 각 기어마다 한 줄씩 출력한다.

  • 기어 번호를 1-2번째 칸에 오른쪽 정렬로 출력;
  • 3번째 칸에 콜론 :;
  • 5번째 칸에, 반시계 방향이면 L, 시계 방향이면 R;
  • 7번째 칸부터 회전량의 크기(RPM)를 항상 소수점 아래 두 자리로 출력.

기어의 회전량 크기가 0이면, 방향과 크기 대신 5번째 칸부터 Warning -- Idle Gear를 출력한다.

오류가 있으면 Simulation #X 줄 다음에 오류 메시지 하나만 1번째 칸부터 출력한다. 겹침이면 Error -- Overlapping Gears, 충돌이면 Error -- Conflicting Gear Rotation이다. 겹침 오류가 우선한다.

각 구성 블록 뒤에는 빈 줄을 한 줄 출력한다.

예제4

  1. 예제 1

    입력
    20 100 5 5 -300 5
    43 100 18 10
    43 74 8 4
    71 100 10 15
    94 100 3 8
    122 100 25 6
    20 100 5 5 -300 5
    43 100 18 10
    43 74 8 4
    71 100 10 10
    89 100 3 8
    105 100 25 6
    20 100 5 5 -300 5
    43 100 18 10
    43 74 8 4
    71 100 10 10
    89 100 3 8
    125 100 25 6
    
    예상 출력
    Simulation #1
     1: R 83.33
     2: L 187.50
     3: L 150.00
     4: R 281.25
     5: L 33.75
    
    Simulation #2
    Error -- Overlapping Gears
    
    Simulation #3
     1: R 83.33
     2: L 187.50
     3: L 150.00
     4: R 187.50
     5: Warning -- Idle Gear
    
  2. 예제 2

    입력
    10 10 6 3 100 1
    10 20 4 3
    
    예상 출력
    Simulation #1
     1: L 150.00
    
  3. 예제 3

    입력
    20 100 5 5 -300 1
    43 100 18 10
    
    예상 출력
    Simulation #1
     1: R 83.33
    
  4. 예제 4

    입력
    10 10 5 5 -200 2
    10 20 5 5
    100 100 5 5
    
    예상 출력
    Simulation #1
     1: R 200.00
     2: Warning -- Idle Gear