페이지

1069번: 집으로

https://www.acmicpc.net/problem/1069


$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;
}

댓글 없음 :

댓글 쓰기