洛谷P3853
这题目真恶心,第一眼看过去以为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;
}

浙公网安备 33010602011771号