레이더 스코프

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

요약
5초 간격의 레이더 스캔 두 개를 받아 각 항공기가 장비 이상, 신규 진입, 신규 이륙, 영역 이탈, 영역 손실 중 어떤 경고에 해당하는지 거리와 속도 기준으로 판정하고 번호순으로 출력한다.
난이도

보통10점 중 4점

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

문제

당신은 새로운 항공 교통 관제 시스템을 만드는 소프트웨어 설계 팀에 합류했습니다. 이 시스템의 기능 중 하나는 감시 대상 항공기의 계기가 제대로 작동하는지 자동으로 검증하고, 위험에 처했거나 방금 이륙했거나 추락했을 가능성이 있는 항공기를 관제사에게 경고하는 것입니다. 여러분은 이 기능의 시제품을 작성해야 합니다.

프로그램은 여러 개의 시나리오를 입력받으며, 각 시나리오는 두 번의 레이더 스윕으로 구성됩니다. 한 번의 스윕은 00대에서 100100대까지의 비행기를 탐지합니다. 스윕이 어떤 비행기를 만날 때마다 데이터 수집 장치는 레이더로부터의 방위각과 거리(마일 단위)를 측정하고, 비행기로부터 스쿼크 번호와 대지 속도(마일/시, 바람 보정이 적용된 대기 속도)를 함께 얻습니다. 두 번의 스윕 정보를 바탕으로, 레이더 영역 안의 각 비행기에 대해 경고가 필요한지 판단해야 합니다.

레이더의 탐지 반경은 1010마일이고, 두 스윕은 정확히 55초 간격으로 순간적으로 이루어진다고 가정합니다. 즉 두 스윕 사이의 시간은 Δt=5/3600\Delta t = 5/3600시간입니다.

방위각 θ\theta와 거리 dd는 평면 좌표로 바꿀 수 있으며(거리 계산에는 상대 위치만 필요합니다), x=dsin⁡θx = d\sin\theta, y=dcos⁡θy = d\cos\theta 로 둡니다.

레이더와 비행기 정보를 바탕으로 다음과 같은 경고를 판단합니다.

  • equipment warning(계기 경고): 두 스윕에 모두 나타난 비행기에 대해, 비행기가 보고한 두 대지 속도의 평균 gˉ=(g1+g2)/2\bar g = (g_1+g_2)/2 가 두 스윕의 위치 변화로 계산한 레이더 측정 속도 vv(= 두 위치 사이의 거리 ÷ Δt\div\,\Delta t)의 10%10\% 이내에 들어오지 않으면 경고합니다. 즉 ∣gˉ−v∣>0.10 v|\bar g - v| > 0.10\,v 일 때 경고합니다.
  • new intrusion(새 침입) / new aloft(새 이륙): 두 번째 스윕에만 나타난(첫 스윕에는 없던) 비행기를 봅시다. 현재 거리가 d2d_2라면, 이 비행기가 최단 경로로 스코프 안으로 들어오기 위해 이동해야 하는 최소 거리는 10−d210 - d_2 마일입니다. 보고 속도에 10%10\% 여유를 더하면 두 스윕 사이에 최대 1.10 g2 Δt1.10\,g_2\,\Delta t 마일을 이동할 수 있습니다. 이 값이 10−d210 - d_2 이상이면 밖에서 날아 들어온 것으로 보고 new intrusion 경고를, 그렇지 않으면 스코프 안에서 방금 이륙한 것으로 보고 new aloft 경고를 냅니다.
  • domain exited(영역 이탈) / domain loss(영역 소실): 첫 번째 스윕에만 나타난(두 번째 스윕에는 없는) 비행기를 봅시다. 첫 스윕 거리가 d1d_1이라면, 스코프 밖으로 나가기 위한 최소 이동 거리는 10−d110 - d_1 마일입니다. 1.10 g1 Δt≥10−d11.10\,g_1\,\Delta t \ge 10 - d_1 이면 스코프를 벗어난 것으로 보고 domain exited 경고를, 그렇지 않으면 관제 영역 안에서 착륙했거나 추락한 것으로 보고 domain loss 경고를 냅니다.

입력

각 시나리오의 첫 줄에는 첫 번째 스윕에서 탐지된 비행기 수를 나타내는 정수 N1N_1 (0≤N1≤1000 \le N_1 \le 100) 이 주어집니다. 이어지는 N1N_1개의 줄에는 각각 스윕 1에서 탐지된 비행기 하나의 정보가 주어집니다. 각 정보는 스쿼크 번호, 방위각, 거리, 대지 속도 순서로 이루어집니다. 스쿼크 번호는 1자리에서 5자리 사이의 정수이고, 방위각·거리·대지 속도는 모두 XXX.XXX 형식의 실수로, 필요한 만큼 앞뒤에 0을 채워 6자리를 맞춥니다.

  • 스쿼크 번호 (0<S<327670 < S < 32767): 각 비행기를 식별하는 전역적으로 유일한 정수이며, 스윕 1과 스윕 2의 같은 비행기를 짝짓는 데 사용합니다.
  • 방위각 (000.000≤A≤359.999000.000 \le A \le 359.999): 북쪽을 00도로 하여 동쪽 방향으로 도는 각도(도 단위)입니다. 따라서 동쪽은 9090도, 남쪽은 180180도, 서쪽은 270270도입니다.
  • 거리 (000.000≤D≤010.000000.000 \le D \le 010.000): 레이더에서 비행기까지의 거리(고도로 인한 추가 거리는 레이더 감지 로직이 이미 제거함)입니다.
  • 대지 속도 (000.000≤G≤999.999000.000 \le G \le 999.999): 비행기가 레이더 기준으로 (어느 방향으로든) 움직이는 속도입니다.

첫 번째 스윕의 비행기 정보 바로 다음 줄에는 두 번째 스윕에서 탐지된 비행기 수 N2N_2 (0≤N2≤1000 \le N_2 \le 100) 가 주어지고, 이어서 N2N_2개의 줄에 스윕 2의 비행기 정보가 같은 형식으로 주어집니다.

다음 시나리오가 있다면 그다음 줄에서 N1N_1부터 다시 시작합니다. 파일의 끝까지 시나리오를 읽어 처리합니다.

출력

각 시나리오마다 먼저 Scenario # X 를 출력합니다. 여기서 XX는 시나리오 번호로, 첫 시나리오가 11이고 이후 11씩 증가합니다.

이어서 경고가 필요한 각 비행기에 대해 정확히 한 줄씩 보고를 출력합니다. 보고 줄은 스쿼크 번호 기준 오름차순으로 정렬합니다. 각 줄은 스쿼크 번호를 1~5열에 오른쪽 정렬하여 쓰고, 6열부터 다음 경고 문자열 중 하나를 이어 씁니다(앞의 공백과 대시를 아래 문자열 그대로 출력해야 합니다):

  • " -- equipment warning"
  • " -- new intrusion"
  • " -- new aloft"
  • " -- domain exited"
  • " -- domain loss"

경고가 필요 없는 비행기에 대해서는 아무것도 출력하지 않습니다.

연속한 두 시나리오 사이는 빈 줄 하나로 구분합니다(마지막 시나리오 뒤에는 여분의 빈 줄을 두지 않습니다).

예제5

  1. 예제 1

    입력
    4
    222   060.111   007.600   095.000
    1496  203.122   009.444   598.991
    111   000.000   005.100   999.999
    013   333.333   006.711   188.448
    4
    111   001.000   003.713   999.999
    777   263.122   009.933   477.633
    333   083.014   004.300   127.122
    222   040.713   009.813   098.125
    
    예상 출력
    Scenario # 1
       13 -- domain loss
      222 -- equipment warning
      333 -- new aloft
      777 -- new intrusion
     1496 -- domain exited
    
  2. 예제 2

    입력
    2
    800   000.000   009.900   500.000
    801   000.000   002.000   050.000
    0
    0
    2
    900   000.000   009.800   600.000
    901   000.000   001.000   030.000
    
    예상 출력
    Scenario # 1
      800 -- domain exited
      801 -- domain loss
    
    Scenario # 2
      900 -- new intrusion
      901 -- new aloft
    
  3. 예제 3

    입력
    0
    0
    
    예상 출력
    Scenario # 1
    
  4. 예제 4

    입력
    2
    500   090.000   002.000   720.000
    700   090.000   002.000   100.000
    2
    500   090.000   003.000   720.000
    700   090.000   003.000   100.000
    
    예상 출력
    Scenario # 1
      700 -- equipment warning
    
  5. 예제 5

    입력
    2
    32000 090.000   009.800   600.000
    999   090.000   002.000   100.000
    3
    5     000.000   002.000   050.000
    999   090.000   003.000   100.000
    12345 000.000   009.900   500.000
    
    예상 출력
    Scenario # 1
        5 -- new aloft
      999 -- equipment warning
    12345 -- new intrusion
    32000 -- domain exited