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)    收藏  举报

导航