洛谷P3853

P3853 [TJOI2007] 路标设置

这题目真恶心,第一眼看过去以为0和L会给在数组里面

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int l, n, k;
vector<int> p;
vector<int> diff;

bool check(int x) {
    int cnt = 0;
    for(int i = 1; i < p.size(); i++) {
        int d = p[i] - p[i - 1];
        cnt += (d - 1) / x;
    }
    return cnt <= k;
}

int main() {
    cin >> l >> n >> k;
    p.resize(n + 2);
    for(int i = 1; i <= n; i++) cin >> p[i];
    p[0] = 0, p[n + 1] = l;
    sort(p.begin(), p.end());

    int left = 1, right = l, ans = l;
    while(left <= right) {
        int mid = (left + right) / 2;
        if(check(mid)) {
            ans = mid;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    cout << ans << '\n';
    return 0;
}
posted @ 2025-05-19 11:25  Chuan81  阅读(7)  评论(0)    收藏  举报