1 条题解

  • 0
    @ 2024-1-29 16:15:14

    C++ :

    #include <bits/stdc++.h>
    #define M 100005
    using namespace std;
    
    double dis[M], K;
    int n;
    bool check(double t) {
        double pre = dis[0] + t;
        for (int i = 1; i < n; i++) {
            if (pre + K < dis[i] - t)
                return false;
            pre = min(dis[i] + t, pre + K);
        }
        return true;
    }
    int main() {
        cin >> K >> n;
        for (int i = 0; i < n; i++)
            scanf("%lf", &dis[i]);
    
        double L = 0, R = 1e9, ans;
        while (R - L > 1e-6) {
        	double mid = (L + R) / 2;
        	if (check(mid)) ans = mid, R = mid;
        	else L = mid;
    	}
        printf("%.3f\n", L);
        return 0;
    }
    

    信息

    ID
    539
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者