건물 높이가 주어진 격자에서, 포물선이 지나는 모든 건물을 넘어야 한다는 조건 아래 각 옥상에 도달하는 최소 점프 횟수를 구한다.
어려움8그래프BFS기하구현아직 제출이 없습니다시간 제한2초메모리 제한1024 MB친구 로빈은 슈퍼히어로다. 처음 그 사실을 알았을 때는 취미 하나쯤은 있어야 하고 우표 수집보다야 재미있겠다고 생각했지만, 지금은 누군가 동네 범죄를 막아 준다는 사실이 그저 고맙다.
로빈은 밤마다 옥상에서 옥상으로 뛰어다니며 도시를 순찰하고 아래에서 벌어지는 일을 살핀다. 슈퍼히어로는 사건이 터지면 곧바로 달려가야 하므로, 로빈은 동네를 빠르게 이동하는 방법을 찾아 달라고 부탁했다.
동네는 정사각형 격자 위에 세워져 있다. 한 구획은 w×w 미터이고 구획마다 건물이 하나씩 있다. 건물 높이는 서로 다를 수 있다. 로빈은 한 건물에서 다른 건물로 갈 때 첫 번째 건물 옥상 중앙에서 두 번째 건물 옥상 중앙까지 한 번에 뛴다. 두 건물이 인접할 필요는 없다. 공중에서 방향을 바꾸지는 못하지만, 도약 각도는 원하는 대로 고를 수 있다.

첫 번째 예제에 해당하는 건물 단면. 건물은 검은색이고, (1,1) 옥상에서 (4,1) 옥상으로 뛰는 경로는 초록색 선이다.
로빈은 어떤 건물에도 부딪히지 않는 도약만 하려고 한다. 부딪혀 봐야 슈퍼히어로가 크게 다치지는 않지만, 누가 유리창을 뚫고 들어오면 건물 주인이 화를 낸다. 그래서 물리를 설명해 준다. 모든 도약은 같은 초기 속력 v로 시작한다. 이 속력은 목적지를 향하는 수평 성분 vd와 위를 향하는 수직 성분 vh로 나뉘고 vd2+vh2=v2을 만족한다. 수평 속도는 vd(t)=vd로 일정하지만 수직 속도는 중력을 받아 vh(t)=vh−tg가 되며, 이 동네에서 g=9.80665 m/s2이다. 로빈의 망토는 공기 저항을 없애 준다. 설명이 한창일 때 로빈은 이미 졸고 있다. 수학은 그만하고 히어로 일을 더 하자는 뜻이다.
결국 계산은 내 몫이다. 도시 배치와 로빈의 비밀 은신처 위치가 주어질 때, 로빈이 도달할 수 있는 옥상이 어디인지, 그리고 각 옥상까지 필요한 최소 도약 횟수를 구하라.
건물 네 개가 만나는 모서리 위를 지나는 도약은 그 건물 네 개보다 모두 높아야 한다.
첫 줄에 정수 여섯 개 dx, dy, w, v, ℓx, ℓy가 주어진다. 도시 격자의 크기는 dx×dy 구획이고 (1≤dx,dy≤20), 건물 한 변의 길이는 w 미터이며 (1≤w≤103), 로빈의 도약 속력은 초속 v 미터이고 (1≤v≤103), 비밀 은신처의 좌표는 (ℓx,ℓy)이다 (1≤ℓx≤dx, 1≤ℓy≤dy).
그다음 dy개 줄에 격자에 있는 건물의 높이가 주어진다. 각 줄에는 음이 아닌 정수 dx개가 있고, j번째 줄은 건물 (1,j),(2,j),…,(dx,j)의 높이다. 높이는 모두 미터 단위이고 103 이하이다.
비밀 은신처에서 각 건물 옥상까지 가는 데 필요한 최소 도약 횟수를 출력한다. 옥상에 도달할 방법이 없으면 횟수 대신 X를 출력한다. 입력과 같은 순서로 dy개 줄에 dx개 값을 출력하고, 한 줄 안의 값은 공백 하나로 구분한다.
어떤 건물의 높이를 10−6 이하만큼 바꾸어도 답은 달라지지 않는다고 가정해도 된다.