P1824 进击的奶牛 Aggressive Cows G

思路:
二分答案
1.最优解
2.设置距离的距离越大,能放的牛棚总数越少——单调性
3.向右找,检查当前mid能放下m头奶牛,则合适(保留给左端点)
#include<bits/stdc++.h>
#define MAXN 100005
using namespace std;
int n,m,x[MAXN],lft,rgt,mid;
bool check(int num)//num=mid 表示当前宽度
{
int lst=1,cnt=1;
for(int i=2;i<=n;++i){
if(x[i]-x[lst]>=num){//如果距离合适 此牛棚可以放牛
cnt++;
lst=i;
}
}
return cnt>=m;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;++i)
scanf("%d",&x[i]);
sort(x+1,x+n+1);
lft=1,rgt=x[n]-x[1];
while(lft<rgt){//向右找
mid=(lft+rgt+1)/2;
if(check(mid))
lft=mid;
else
rgt=mid-1;
}
cout<<rgt;
return 0;
}

浙公网安备 33010602011771号