거울

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

요약
45도로 기울어진 N개의 작은 거울이 있을 때, 하나를 뒤집어 원점에서 오른쪽으로 나간 빛이 (a,b)에 도달하게 하는 첫 번째 거울의 번호를 구한다.
난이도

보통10점 중 7점

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

문제

농부 존(Farmer John)의 소들이 농장 곳곳에서 말썽을 부려서, 존은 소들을 더 잘 감시하고 싶어 합니다. 그는 농장 여러 곳에 반사 울타리(거울) NN개(1≤N≤2001 \le N \le 200)를 설치하여, 자신의 집 (0,0)(0,0)에서 헛간이 있는 (a,b)(a,b)까지 볼 수 있기를 바랍니다.

농장을 2차원 지도로 나타내면, ii번째 울타리는 정수 좌표 (xi,yi)(x_i, y_i)를 중심으로 하는 짧은 선분이며 45도로 기울어져 있습니다(/ 모양이거나 \ 모양). 예를 들어 (3,5)(3,5)에 놓인 / 방향의 울타리는 (2.9,4.9)(2.9, 4.9)에서 (3.1,5.1)(3.1, 5.1)까지의 선분으로 나타낼 수 있습니다. 모든 울타리(그리고 헛간)는 서로 다른 위치에 있으며, 좌표는 모두 −106-10^6 이상 10610^6 이하의 정수입니다. 어떤 울타리도 (0,0)(0,0)이나 (a,b)(a,b)에는 놓여 있지 않습니다.

존은 집 (0,0)(0,0)에 앉아 정확히 오른쪽(+x+x 방향)을 바라봅니다. 그의 시선은 일부 반사 울타리에 부딪혀 반사되며, 이렇게 해서 헛간 (a,b)(a,b)가 보이기를 바랍니다. 그런데 존은 울타리 하나의 방향을 잘못 설치했다고 생각합니다(예: /로 놓아야 할 것을 \로 놓음). 방향을 반대로(/와 \ 사이에서) 바꾸었을 때 헛간 (a,b)(a,b)가 보이게 되는, 목록에서 가장 앞선 울타리의 번호를 출력하세요.

울타리를 하나도 바꾸지 않아도 이미 (a,b)(a,b)가 보인다면 00을 출력합니다. 울타리 하나의 방향을 바꾸어도 여전히 (a,b)(a,b)를 볼 수 없다면 −1-1을 출력합니다.

입력

  • 첫째 줄: 공백으로 구분된 세 정수 NN, aa, bb.
  • 둘째 줄부터 N+1N+1번째 줄까지: ii번째 울타리를 나타내는 줄로, x_i y_i / 또는 x_i y_i \ 형식입니다. 여기서 (xi,yi)(x_i, y_i)는 울타리 중심의 위치이고, / 또는 \는 울타리의 방향을 뜻합니다.

출력

  • 첫째 줄: 방향을 바꾸면 존이 (a,b)(a,b)를 볼 수 있게 되는 가장 앞선 울타리의 번호. 아무것도 바꾸지 않아도 이미 (a,b)(a,b)가 보이면 00을, 울타리 하나를 바꾸어도 (a,b)(a,b)를 볼 수 없으면 −1-1을 출력합니다.

힌트

입력 설명

농장 지도는 다음과 같습니다(H는 존의 집, B는 헛간).

3 .\.....
2 //.\..B
1 .......
0 H../...
  0123456

출력 설명

(3,2)(3,2)에 있는 울타리의 방향을 바꾸면 존은 헛간을 볼 수 있습니다. 지도로 나타내면 다음과 같습니다.

3 .\.....
2 //./--B
1 ...|...
0 H--/...
  0123456

예제3

  1. 예제 1

    입력
    5 6 2
    3 0 /
    0 2 /
    1 2 /
    3 2 \
    1 3 \
    
    예상 출력
    4
    
  2. 예제 2

    입력
    1 2 5
    2 0 /
    
    예상 출력
    0
    
  3. 예제 3

    입력
    1 2 -5
    2 0 /
    
    예상 출력
    1