$O(t)$
집까지 거리를 rt라 하자.
n번 점프거리<=rt<n+1번 점프거리라면
답의 후보는 다음과 같다.
1. 그냥 걷는다.
2. 집방향으로 n번 점프하고 나머지는 걷는다.
3.
i) n=0
대각선으로 2번 점프해서 도착하거나 집방향으로 1번 점프하고 떨어진 거리만큼 걷는다.
ii) n>0
대각선으로 n+1번 점프해서 도착한다.
#include<cstdio> #include<algorithm> using namespace std; int x, y, d, t, c; int main() { while (~scanf("%d%d%d%d", &x, &y, &d, &t)) { double rt = sqrt(x*x + y*y); c = rt / d; printf("%.9lf\n", min({ rt, rt - c*d + c*t,c ? (double)c*t + t : min(t*2.0,t + d - rt) })); } return 0; }
댓글 없음 :
댓글 쓰기