Aggressive cows poj 2456
题意:在一位坐标上给N个点,将C头牛放在N个点中的C个点上使C头牛之间的最小距离最大。
解题思路:将C头牛放在N个点中的C个点上的最大距离是:dis=(Pmax-Pmin)/(C-1).(最大的坐标-最小的坐标在除以C-1)。然后以dis为上限0为下限进行二分搜索。
一道不错的二分+贪心的题,对二分应用有更好的理解。此题便是以奶牛之间的距离作为二分对象,做题一定要考虑全面,分析清楚。
AC代码:
View Code
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 const int N=100005; 6 int p[N]; 7 int n,c; 8 bool greedy(int x){ 9 int num=1,d=p[0]; 10 for(int i=1;i<n;i++){ 11 if(p[i]-d>=x){ 12 num++; 13 d=p[i]; 14 } 15 } 16 if(num>=c)return true; 17 return false; 18 } 19 int main() 20 { 21 int i,low,high,mid; 22 while(scanf("%d %d",&n,&c)!=EOF){ 23 for(i=0;i<n;i++) 24 scanf("%d",&p[i]); 25 sort(p,p+n); 26 high=(p[n-1]-p[0])/(c-1); 27 low=0; 28 while(low<=high){ 29 mid=(low+high)/2; 30 if(greedy(mid))low=mid+1; 31 else high=mid-1; 32 } 33 printf("%d\n",low-1); 34 } 35 return 0; 36 }
posted on 2012-09-05 20:12 Acmer_Roney 阅读(525) 评论(0) 收藏 举报

浙公网安备 33010602011771号