• nyoj--586--疯牛(二分&&枚举)


    疯牛

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:4
    描述
    农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000).
    但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢?
    输入
    有多组测试数据,以EOF结束。
    第一行:空格分隔的两个整数N和C
    第二行——第N+1行:分别指出了xi的位置
    输出
    每组测试数据输出一个整数,满足题意的最大的最小值,注意换行。
    样例输入
    5 3
    1
    2
    8
    4
    9
    样例输出
    3
    来源
    POJ 翻译
    上传者

    TC_张友谊



    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int a[100010],n,c;
    bool judge(int x)//现在列举每一个可以作为间距的数值 
    {
    	int temp=a[0];
    	int cnt=1;
    	for(int i=1;i<n;i++)
    	{
    		if(a[i]-temp>=x)
    		{
    			temp=a[i];
    			cnt++;
    			if(cnt>=c)
    			return true;//如果可以使c头牛独自占领一个牛圈,那么x可以再大 
    		}
    	}
    	return false;
    }
    int main()
    {
    	while(scanf("%d%d",&n,&c)!=EOF)
    	{
    		for(int i=0;i<n;i++)
    		scanf("%d",&a[i]);
    		sort(a,a+n);
    		int l=0,r=a[n-1]-a[0],mid;
    		while(l<=r)
    		{
    			mid=(l+r)/2;
    			if(judge(mid))
    			l=mid+1;
    			else
    			r=mid-1;
    		}
    		printf("%d
    ",l-1);//跳出循环的时候l>r,这时的mid也就是l-1 
    	}
    	return 0;
    }



  • 相关阅读:
    Git 远程操作详解
    Golang io标准库
    Golang strings标准库
    Go WebSocket 实现
    Golang Gorm零值数据更新小坑
    [Linux] 分区扩容
    即截即贴,推荐一个提升截图对比效率的工具Snipaste
    POI 替换 word 关键字并保留样式
    前端图片压缩与 zip 压缩
    ubuntu20更换内核
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273733.html
Copyright © 2020-2023  润新知