设为首页 加入收藏

TOP

POJ - 2456 Aggressive cows 二分
2015-11-21 01:02:06 来源: 作者: 【 】 浏览:1
Tags:POJ 2456 Aggressive cows二分

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

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

#include
   
     #include
    
      #include
     
       using namespace std; #define maxn 100010 int 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; } 
     
    
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇FZU 1893 内存管理 下一篇hdu 1205 吃糖果(鸽巢原理)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: