맞춤 팝업 카드

평행한 접힘선을 따라 접히는 팝업 카드에서 두 번째 선분이 존재하도록 x축 위의 접점 (Xp,0)을 옮겨야 하는 최소 거리를 구한다.

어려움8기하수학이분 탐색구현아직 제출이 없습니다시간 제한3초메모리 제한512 MB

문제

레이저 커터를 쉽게 구할 수 있게 되면서 팝업 카드를 다시 설계할 만해졌다. 이 문제는 그 설계 도구의 첫 버전이다.

카드는 평면 다각형 네 개를 접는 선 네 개로 이어 붙여 만든다. 네 접는 선은 접는 동안 언제나 서로 평행하다. 그 공통 방향을 zz 방향이라고 하자. 그러면 구조 전체를 z=0z = 0 평면에 정사영해서 다룰 수 있으므로, 아래에서는 zz 좌표를 적지 않는다.

카드의 두 면은 처음에 서로 9090도를 이루고, 각각 xx축의 양의 부분과 yy축의 양의 부분으로 나타낸다. 두 면은 무한히 넓다고 본다. 접히는 구조는 제1사분면의 점 하나와 그 점을 두 면에 각각 잇는 선분 두 개다. 카드를 닫으면 두 면이 서로 가까워지도록 회전한다. 두 선분을 잘 고르면 구조는 도중에 걸리지 않고 평평하게 접히며, 접기가 끝나는 순간 두 면과 두 선분이 모두 한 직선 위에 놓인다. 면과 선분은 휘거나 늘어나거나 새로 접히거나 접는 선에서 떨어져서는 안 되고, 두 면 사이의 각은 9090도를 넘지 않는다.

사용자는 xx축 위의 점 (Xp,0)(X_p, 0)에서 제1사분면의 점 (Xa,Ya)(X_a, Y_a)까지 선분 하나를 그린다. 도구는 (Xa,Ya)(X_a, Y_a)에서 다른 면 위의 점 (0,Yp)(0, Y_p)까지 잇는 두 번째 선분을 찾는다. 여기서 Yp>0Y_p > 0이고, 카드는 여전히 평평하게 닫혀야 한다. 그런 선분이 하나도 없으면 도구는 xx축 위의 접점을 가장 짧은 거리만큼 옮겨서 선택지가 적어도 하나 생기게 한다. 그 거리를 구하라.

입력

입력은 여러 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄이고, 공백 하나로 구분된 정수 XaX_a, YaY_a, XpX_p가 주어진다 (1Xa20001 \le X_a \le 2000, 1Ya20001 \le Y_a \le 2000, 1Xp20001 \le X_p \le 2000). 이 세 수는 사용자가 그린 선분, 즉 (Xp,0)(X_p, 0)에서 (Xa,Ya)(X_a, Y_a)까지의 선분을 나타낸다.

공백 하나로 구분된 00 세 개가 주어지는 줄이 나오면 입력이 끝난다. 테스트 케이스는 15001500개 이하다.

출력

각 테스트 케이스마다 XpX_p를 옮겨야 하는 가장 짧은 거리를 한 줄에 출력한다. 옮긴 뒤에는 (Xa,Ya)(X_a, Y_a)에서 Yp>0Y_p > 0인 어떤 점 (0,Yp)(0, Y_p)까지 잇는 선분이 있어서 카드가 평평하게 닫혀야 한다.

조건을 만족하는 거리의 집합은 열린 집합일 수 있다. 그래서 구하는 값은 조건을 만족하는 거리가 얼마든지 가까이 존재하는 가장 작은 수로 정한다. 이 값을 소수점 아래 여섯 자리까지 출력한다.

힌트

첫 번째 예제 (Xa=1X_a = 1, Ya=1Y_a = 1, Xp=1X_p = 1)가 그림에 나온 경우다. 아무것도 옮기지 않아도 된다. 그림에 점선으로 표시한 (1,1)(1, 1)에서 (0,1)(0, 1)까지의 선분을 그리면 구조가 평평하게 접힌다.

세 번째 예제 (Xa=5X_a = 5, Ya=4Y_a = 4, Xp=20X_p = 20)에서는 7.57.5보다 크고 2020보다 작은 거리라면 모두 유효한 카드가 되지만, 7.57.5 자체로는 되지 않는다. 유효한 거리가 7.57.5에 얼마든지 가까워지므로 답은 7.57.5다.