도망자와 저격수

시작점과 총구의 초기 각도와 회전 속도가 주어질 때 회전하는 총구가 따라잡을 수 있는 가장 빠른 이동 속도를 구합니다.

어려움9게임 이론기하수학아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

당신은 적에게서 달아나는 중이다. 적은 레이저 총을 든 저격수이고, 한 번이라도 맞으면 그대로 끝난다. 그래서 얼마나 빨리 달려야 살아남는지 알고 싶다.

당신과 저격수는 xy 평면 위에 있다. x축은 오른쪽, y축은 위쪽을 향한다. 평면은 무한히 넓고, 레이저나 당신의 이동을 막는 장애물은 없다.

저격수와 총은 (0,0)(0, 0)에 있고 움직이지 않는다. 총은 단위 시간마다 최대 ω\omega도까지 시계 방향이나 반시계 방향으로 계속 회전하며, 저격수는 언제든지 회전 방향을 바꿀 수 있다. 시각 00에 총은 x축의 양의 방향에서 반시계 방향으로 θ\theta도 돌아간 방향을 향한다.

당신은 (x,y)(x, y)에서 출발해 속력 vv 이하로 어느 방향으로든 움직일 수 있고, vv 값은 당신이 정한다. 총이 당신의 위치를 향하는 순간 바로 맞으므로, 레이저가 날아오는 시간은 무시한다. 당신은 점이고, 레이저는 (0,0)(0, 0)을 끝점으로 하는 반직선이다.

당신과 저격수가 모두 최선으로 움직일 때, 저격수가 유한한 시간 안에 당신을 맞히는 가장 큰 속력 vv를 구하여라.

입력

첫째 줄에 정수 xx, yy, θ\theta, ω\omega가 공백으로 구분되어 주어진다.

  • x1000|x| \le 1000, y1000|y| \le 1000, (x,y)(0,0)(x, y) \ne (0, 0)은 당신의 처음 위치이다.
  • 0θ<3600 \le \theta < 360은 총이 처음 향하는 방향이며, x축의 양의 방향에서 반시계 방향으로 잰 각도이다.
  • 1ω1001 \le \omega \le 100은 총이 단위 시간 동안 회전할 수 있는 각도이다.

시각 00에 총은 당신의 위치를 향하지 않는다.

출력

가장 큰 속력 vv를 소수점 아래 여덟째 자리까지 반올림해 한 줄에 출력한다. printf("%.8f")가 만드는 형식과 같다. 배정밀도 실수로 올바르게 계산했을 때 마지막 자리가 달라질 만큼 반올림 경계에 가까운 입력은 주어지지 않는다.