POJ - 2456 Aggressive cows 二分

来源:互联网 发布:jquery.color.js 下载 编辑:程序博客网 时间:2024/05/16 15:53

题目大意:有N个牛舍在同一条直线上,每个牛舍都有相应的坐标
现在有C头牛,要求放在这牛舍中,使得相邻两头牛之间的距离的最小值达到最大

解题思路:直接二分距离,然后再进行判断
这题得反省一下了:因为我把cur重复定义了,所以一直找不到错误,标记一下。。。

#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define maxn 100010int pos[maxn];int n, c;int find(int s, int e, int dis) {     int l = s, r = e;    while(l < r) {        int mid = (l + r) / 2;        if(pos[mid] >= dis)             r = mid;        else             l = mid + 1;    }    return l;}bool judge(int mid) {    int dis = pos[0], cur = 1;    for(int i = 1; i < c; i++) {        dis += mid;        if(dis > pos[n - 1])            return false;        cur = find(cur, n - 1, dis);//      int cur = lower_bound(pos, pos + n, dis) - pos;        dis = pos[cur];    }    return true;}int solve() {    int l = 0, r = pos[n - 1];    while(l <= r) {        int mid = (l + r) / 2;        if(judge(mid))            l = mid + 1;        else            r = mid - 1;    }    return l - 1;}void init() {    for(int i = 0; i < n; i++)        scanf("%d", &pos[i]);    sort(pos, pos + n);}int main() {    while(scanf("%d%d", &n, &c) != EOF) {        init();        printf("%d\n", solve());    }    return 0;}
0 0