标签:距离 data bug possible system ack \n UNC size
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 22674 | Accepted: 10636 |
Description
Input
Output
Sample Input
5 3 1 2 8 4 9
Sample Output
3
Hint
Source
【题意】
农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000). 但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢
【分析】
贪心+二分
二分枚举相邻两牛的间距,判断大于等于此间距下能否放进所有的牛。
【代码】
#include<cstdio>
#include<algorithm>
#include<iostream>
#define debug(x) cerr<<#x<<" "<<x<<‘\n‘;
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
return x*f;
}
const int N=1e5+5;
int ans,n,m,d[N];
inline bool check(int now){
int res=1,p=d[1];
for(int i=2;i<=n;i++)
if(d[i]-p>=now)
res++,p=d[i];
return res>=m;
}
int main(){
n=read(),m=read();
for(int i=1;i<=n;i++) d[i]=read();
sort(d+1,d+n+1);
int l=0,r=d[n],mid;
while(l<=r){
mid=l+r>>1;
if(check(mid)){
ans=mid;
l=mid+1;
}
else{
r=mid-1;
}
}
printf("%d\n",ans);
return 0;
}
POJ 2456 Aggressive cows(二分答案)
标签:距离 data bug possible system ack \n UNC size
原文地址:https://www.cnblogs.com/shenben/p/10311950.html