뱀파이어!

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

요약
각 흡혈귀에 대해 반사면이 가려지지 않고 비추는 방향을 찾아, 위험한 흡혈귀마다 피해야 할 방향을 알파벳 순으로 출력한다.
난이도

보통10점 중 6점

유형
시뮬레이션, 구현, 기하, 완전 탐색
정답자
아직 제출이 없습니다

문제

어떤 방 안에 뱀파이어 몇 명, 평범한 인간 몇 명, 그리고 거울 몇 개가 격자(grid) 위에 놓여 있다. 각 거울은 북(N), 남(S), 동(E), 서(W) 네 방향 중 하나를 향하며, 이 방향은 거울의 어느 면이 반사하는 면인지를 나타낸다.

뱀파이어는 거울에 비치지 않기 때문에, 반사된 모습을 보일 수 없다는 사실이 그들에게는 창피한 일이다. 어떤 뱀파이어가 거울의 반사면과 수평 또는 수직으로 일직선 상에 있고 그 사이에 아무런 물체도 없다면, 그 뱀파이어는 창피를 당할 위험에 처한다. 시야를 가로막는 것은 인간과 다른 거울뿐이다. 뱀파이어는 반사된 모습을 남기지 않으므로 다른 뱀파이어를 가려 주지 못하며, 따라서 시야를 막지 않는다.

각 뱀파이어에게 위험한 방향들을 알려 주는 것이 여러분의 임무이다.

입력

각 테스트 케이스는 세 정수 vv, oo, mm으로 시작하며, 각각 방 안의 뱀파이어 수, 평범한 인간 수, 거울 수이다.

이어지는 vv개의 줄에는 각각 뱀파이어가 있는 격자 칸의 좌표 xx, yy가 주어진다(0≤x,y≤1000 \le x, y \le 100). x=0x = 0은 가장 서쪽 열, y=0y = 0은 가장 남쪽 행이다.

그다음 oo개의 줄에는 같은 형식으로 평범한 인간의 격자 칸이 주어진다.

그다음 mm개의 줄에는 각각 거울을 설명한다. 반사 방향을 나타내는 문자(N, S, E, W 중 하나) 뒤에, 거울의 시작 칸과 끝 칸을 나타내는 네 정수 x1 y1 x2 y2x_1\ y_1\ x_2\ y_2가 온다(좌표 범위는 위와 같다). 거울은 양의 길이를 가질 수 있고, 두께는 격자 한 칸이며, 항상 동서 축 또는 남북 축을 따라 놓인다.

각 격자 칸에는 뱀파이어, 인간, 거울 조각이 최대 하나만 있다. 마지막 테스트 케이스 뒤에는 0 0 0이 적힌 줄이 온다.

출력

각 테스트 케이스마다 케이스 번호를 한 줄에 출력한다. 그다음, 창피를 당할 위험에 처한 각 뱀파이어에 대해, 단어 vampire와 그 뱀파이어의 번호(뱀파이어는 입력에 나타나는 순서대로 1번부터 vv번까지 번호가 매겨진다), 그리고 피해야 할 방향들을 한 줄에 출력한다.

피해야 할 방향은 뱀파이어에서 반사 거울을 향하는 방향, 즉 거울이 향한 방향의 반대 방향이다. 예를 들어 어떤 뱀파이어가 남쪽을 향한 거울과 동쪽을 향한 거울에 노출되어 있다면, 피해야 할 방향은 북쪽과 서쪽이다. 방향은 알파벳 순서로 나열한다(예: west north이 아니라 north west).

한 테스트 케이스에서 위험에 처한 뱀파이어가 없다면 대신 none을 출력한다. 위험에 처한 뱀파이어는 번호가 작은 순서대로 출력한다.

예제2

  1. 예제 1

    입력
    4 2 4
    1 1
    2 1
    3 4
    6 2
    1 2
    1 6
    S 0 4 2 4
    W 4 2 4 0
    N 6 4 7 4
    S 6 5 7 5
    1 0 2
    20 20
    W 30 10 30 30
    N 25 20 27 20
    0 0 0
    
    예상 출력
    Case 1:
    vampire 1 east
    vampire 2 east north
    Case 2:
    none
    
  2. 예제 2

    입력
    1 0 4
    10 10
    W 15 10 15 10
    E 5 10 5 10
    S 10 15 10 15
    N 10 5 10 5
    0 0 0
    
    예상 출력
    Case 1:
    vampire 1 east north south west