悬关!!!
查看原帖
悬关!!!
1179393
Noldo楼主2024/3/27 21:03
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e5;
int dis, n, m;
int sign[N];
int s[N];
bool check(int x) {//最小空旷指数
    int cnt = 0;
    for (int i = 1; i < n; i++) {
        if (s[i] > x) {
            int num = s[i] - x;
            while (num > x) {
                num -= x;
                cnt++;
            }
        }
    }
    if (cnt >= m)return true;//l
    else return false;//r
}
int main() {
    cin >> dis >> n >> m;
    for (int i = 0; i < n; i++) {
        cin >> sign[i];
        if (i != 0) {
            s[i] = sign[i] - sign[i - 1];
        }
    }
    int r = dis + 1; int l = -1;
    while (l + 1 != r) {
        int mid = (l + r) / 2;
        if (check(mid))l = mid;
        else r = mid;
    }
    if (check(l))cout << r << endl;
    else cout << l << endl;
    return 0;
}
2024/3/27 21:03
加载中...