我刚刚在看这道题的时候我亲爱的妹妹突然告诉我 她和平分手了 其实我觉得 恋爱是建立在两个人互相爱慕的基础上 整天抄来吵去也着实没有意思 每天腻腻歪歪的话也是浪费时间 不要把感情过分侧重于爱情上!!撞得头破血流 满目疮痍才突然愿意恍然大悟 生活 不是这样过的
哔哔哔 看这一题这一题 这一题有个很小的细节!!!“这个最大的最小距离是什么呢?”一个语文渣渣真的读的很费劲...导致我只知道大概会用到二分法(算是猜对了一半啵)却不知道具体怎么写 看了别人的代码 偶觉的这句话可以理解为:在所有可行的方法里,他们的距离最小值要选他们之中最大的!!!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;
}
加油,妹砸,不要真的做小弱鸡啊