NYOJ586疯牛

我刚刚在看这道题的时候我亲爱的妹妹突然告诉我 她和平分手了 其实我觉得 恋爱是建立在两个人互相爱慕的基础上 整天抄来吵去也着实没有意思 每天腻腻歪歪的话也是浪费时间 不要把感情过分侧重于爱情上!!撞得头破血流 满目疮痍才突然愿意恍然大悟 生活 不是这样过的

哔哔哔 看这一题这一题 这一题有个很小的细节!!!“这个最大的最小距离是什么呢?”一个语文渣渣真的读的很费劲...导致我只知道大概会用到二分法(算是猜对了一半啵)却不知道具体怎么写  看了别人的代码 偶觉的这句话可以理解为:在所有可行的方法里,他们的距离最小值要选他们之中最大的!!!emmm...依然觉得很绕口ORZ

judge函数是为了判断 每个中值为最小的时候...等等...突然觉得不对劲...偶再去看看

emmmm...judge函数是判断当前mid值是不是一组可行方法的最小值 如果是 再往大于它的部分查找,如果不存在就往它小的地方查找 知道左指针大于右指针

binary函数进行的是二分查找  deideidei 然后它最后之所以return low-1 是因为low=mid(上一个成立的)+1 

这道题的大概思路就是酱紫~

附上代码酱

#include<stdio.h>  
#include<stdlib.h>
#include<algorithm> 
using namespace std; 
int a[100005],n,c;  
int judge(int mid)  
{  
    int i,count=1,t=a[0]; //count是指放了几头牛,从1开始。t用来表示当前的房间号
    for(i=1;i<n;i++)
	{
		if(a[i]-t>=mid)//找出第一个与a[0]距离大的位置 
		{  
			count++;//在此位置放入一头牛 
			t=a[i];//t为更新的位置 
			if(count>=c)//如果已经有c个房间放够c头牛,则 返回1 
				return 1;  
		}
	}  
    return 0;
}  
int binary()//二分搜索符合条件的最小距离的最大值  
{  
    int low=0,high=a[n-1]-a[0],mid;  //high表示俩房子的最大差 
    while(low<=high){  //进行二分搜索 
        mid=(low+high)/2;//mid即为最小房间与最大房间号之间的距离的中值 
        if(judge(mid))  
            low=mid+1; //所求距离>=mid,可以继续增大试探 
        else  
            high=mid-1;//所求距离<mid,所以必须减小来试探  
    }  
    return low-1; //由于在之前距离+1,所以此时-1 这是一个非常小的小细节 
}   
int main()  
{  
    while(~scanf("%d%d",&n,&c)){  
        int i;  
        for(i=0;i<n;i++)  
            scanf("%d",&a[i]);  
        sort(a,a+n);  
        printf("%d\n",binary());  
    }  
    return 0;  
} 
加油,妹砸,不要真的做小弱鸡啊
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值