zoukankan      html  css  js  c++  java
  • POJ2456 Aggressive cows

    题目:http://poj.org/problem?id=2456

    思路:二分经典题目,二分答案,判断间隔mid是否能容纳所有的奶牛。不过二分坑点比较多

    例如查找值的时候,while里面写<=, 否则{1,3,5}查找不到5,返回值也是很迷的。这道题返回mid是错误的。可以从结束条件分析,结束条件:l > r, 前一个状态下的  l+1  了,所以最后返回  l-1(纯属个人理解)

    推荐二分博客:https://blog.csdn.net/yefengzhichen/article/details/52372407

    AC代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int INF = 0x3f3f3f3f;
    int n, dis;
    long long d[100010];
    
    int main() {
    	while(~scanf("%d%d", &n, &dis)) {
    		long long maxx = -1, minn = INF;
    		for(int i = 0; i < n; i++) {
    			scanf("%lld", &d[i]);
    		}
    		sort(d, d+n);
    		long long l = 0, r =d[n-1]-d[0], mid;//
    		while(l <= r) {//判断条件<=  例如1 3 5 如果<就不行了 
    			mid = (r-l)/2+l;//间隔值 
    			int zhi = 1;
    			long long ans = d[0];//最左边开始 
    			for(int i = 1; i < n; i++) {//判断是否用mid可以安排所有的奶牛 
    				if(d[i] >= ans + mid) {
    					zhi++;
    					ans = d[i];
    				}
    				if(zhi>=dis)
    					break;
    			}
    			if(zhi >= dis)//如果mid小 
    				l = mid+1;
    			else//mid大 
    				r = mid-1;
    		}
    		printf("%lld
    ", l-1);//不知道为什么mid不行 
    	}
    } 
  • 相关阅读:
    ssh 远程命令
    POJ 2287
    POJ 2376
    hihoCoder1488
    POJ1854
    HDU 5510
    HDU 4352
    CodeForces 55D
    HDU 1517
    CodeForces 1200F
  • 原文地址:https://www.cnblogs.com/ACMerszl/p/9572946.html
Copyright © 2011-2022 走看看