【挑战】POJ3069 贪心

第45页。

起点是最左边的点,每次把最左边能到的最右边的那个点作为标记点,然后更新起点。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define ll long long
 5 using namespace std;
 6 const int N=1000+50;
 7 int a[N],n,r;
 8 int main(){
 9     int i,j;
10     while(scanf("%d %d",&r,&n),!(r==-1&&n==-1)){
11         for(i=0;i<n;i++){
12             scanf("%d",&a[i]);
13         }
14         sort(a,a+n);
15         int ans=0,s,p;
16         for(i=0;i<n;){
17             s=a[i++];
18             //向右前进直到距s大于r的点
19             while(i<n&&a[i]<=s+r)i++;
20             p=a[i-1];//p是标记点
21             //向右前进直到距p大于r的点
22             while(i<n&&a[i]<=p+r)i++;
23             ans++;
24         }
25         printf("%d\n",ans);
26     }
27 }
View Code

 

posted @ 2017-09-21 15:25  lsy123  阅读(93)  评论(0)    收藏  举报