思考: 和奶牛那道题是类似的,学到了,二分法的模板如下:
void search(){
r=a[n]-a[1];
while(l<=r){
mid=(l+r)/2;
if(judge(mid))l=mid+1;
else r=mid-1;
}
}
题解:
#include<bits/stdc++.h>
#define INF 0x7fffffff
using namespace std;
int main()
{
int a,b;
int c[100010];
cin>>a>>b;
for(int i=1;i<=a;i++)
cin>>c[i];
sort(c+1,c+a+1);
int l=0,r=INF,mid,now,tot;
while(l<r)
{
mid=(l+r+1)/2;
now=c[1];
tot=1;
for(int i=2;i<=a;i++)
{
if(c[i]-now>=mid) now=c[i],++tot;
if(tot>=b) break;
}
if(tot<b) r=mid-1;
else l=mid;
}
cout<<l<<endl;
return 0;
}
本文深入探讨了二分法的实现模板,并通过一个具体的编程示例,详细讲解了如何利用二分法解决特定问题。文章包含了一段C++代码,展示了如何在数组中寻找满足特定条件的最小值,适用于算法学习和竞赛准备。
1108

被折叠的 条评论
为什么被折叠?



