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

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

거울 뒤의 화면

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

요약
정사각형 영역에서 레이저 광선이 거울에 반사되고 분할기를 통과하며 나뉘는 과정을 시뮬레이션하고, 광선을 흡수한 검출기 번호를 모두 출력한다.
난이도

보통10점 중 7점

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

문제

악마 박승원은 세계에서 가장 강력한 레이저를 찾고 있으며, 그 일을 당신에게 맡겼다. 당신에게는 레이저 시제품이 있지만, 제작 예산을 받으려면 먼저 시뮬레이션 결과를 박승원에게 보여 주어야 한다.

시뮬레이션은 2차원 평면 위에 "거울", "광선 스플리터", "광선 감지기"를 배치하면서 시작한다. 각 물체는 하나의 선분으로 표현된다.

  • 거울(M): 광선이 거울에 닿으면 거울 선분에 대해 반사되어 진행한다.
  • 감지기(D): 들어오는 광선을 흡수한다.
  • 스플리터(S): 들어오는 광선을 두 개로 나눈다. 하나는 스플리터를 그대로 통과하여 방향이 바뀌지 않고, 다른 하나는 스플리터 선분에 대해 반사되어 진행한다.

시작점과 방향이 주어진 레이저를 발사했을 때, 어떤 감지기들이 광선을 흡수하는지 구하라. 문제를 단순화하기 위해 다음을 가정한다.

  • 시뮬레이션은 한 변의 길이가 100100인 정사각형 구역만 다루면 되며, 모든 물체는 이 구역 안에 있다.
  • 주어지는 선분들은 서로 겹치거나 만나지 않는다.
  • 레이저는 정사각형 구역의 가장자리에서 발사된다.
  • 모든 광선이 구역 밖으로 빠져나가거나 감지기에 흡수되면 시뮬레이션이 끝난다.
  • 시뮬레이션 전체에서 레이저 광선의 반사 횟수는 100100번 미만이다.
  • 감지기는 최소 11개 존재한다.
  • 시뮬레이션 도중 레이저 광선이 어떤 물체와 한 직선 위에 놓이는 경우는 없다.

입력

첫째 줄에 테스트 케이스의 수 NN이 주어진다. 각 테스트 케이스는 다음과 같이 구성된다.

  • 첫째 줄에 "x,y i,j" 형식으로 레이저의 시작점 (x,y)(x, y)와 방향 벡터 (i,j)(i, j)가 주어진다. 시작점은 구역 가장자리 위의 한 점이다. 모든 수는 정수이며 −1024≤i,j≤1024-1024 \le i, j \le 1024이다.
  • 둘째 줄에 물체의 수 PP가 주어진다. (1≤P≤100)(1 \le P \le 100)
  • 이어지는 PP개의 줄에 물체가 하나씩 주어진다. 각 줄은 물체의 종류를 나타내는 문자로 시작하며, "M"은 거울, "S"는 스플리터, "D"는 감지기를 뜻한다. 그 뒤에 선분의 두 끝점이 각각 "x,y" 형식으로 주어진다.
  • 물체는 입력에 등장한 순서대로 11번부터 PP번까지 번호가 매겨진다.

출력

각 테스트 케이스마다 먼저 "DATA SET #k"를 출력한다. 여기서 kk는 테스트 케이스 번호(11부터 시작)이다.

광선을 흡수한 감지기가 하나도 없으면 "NO BEAMS DETECTED"를 출력한다.

그렇지 않으면, 광선을 흡수한 감지기의 번호(입력에서의 물체 번호)를 오름차순으로 한 줄에 하나씩 출력한다. 같은 감지기가 여러 광선을 흡수하더라도 번호는 한 번만 출력한다.

힌트

Enigma - The Screen Behind The Mirror

예제1

  1. 예제 1

    입력
    1
    50,100 0,-1
    6
    D 0,40 20,20
    M 40,20 60,40
    D 80,20 100,40
    D 0,70 20,90
    S 40,90 60,70
    D 80,90 100,70
    
    예상 출력
    DATA SET #1
    1
    6