[TJOI2007] 路标设置 题解
作者:互联网
众所周知,我刚刚学了二分。于是决定学以致用。看到一道往年省选,我就动了杀心。于是切了。
由于它的标签是二分,所以我就二分了。观察发现,道路的空旷指数是有序的,所以对这个域二分。很明显,你需要先把原有路标排序,然后才能判断是否放上新的路标。
然后就好做了。时间复杂度 \(O(n \log L)\) .
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 100005;
int L, n, k, a[maxn];
bool check(int d) {
int cnt = 0;
for(int i = 2; i <= n; i ++) {
cnt += (a[i] - a[i - 1]) / d;
if((a[i] - a[i - 1]) % d == 0) cnt --;
} if(cnt > k) return false;
else return true;
}
int main() {
scanf("%d%d%d", &L, &n, &k);
for(int i = 1; i <= n; i ++) cin >> a[i];
sort(a + 1, a + n + 1);
a[0] = 0;
a[n + 1] = L;
int l = 1, r = L, mid;
while(l < r) {
mid = l + r >> 1;
if(check(mid)) r = mid;
else l = mid + 1;
} printf("%d", l);
}
标签:二分,路标,题解,d%,mid,int,TJOI2007,include 来源: https://www.cnblogs.com/Inversentropir-36/p/14386298.html