POJ3069:Saruman's Army

 题目链接:http://poj.org/problem?id=3069

贪心

使用两个标志,一个边界点,一个当前比较点即可不断重复更新所需的点个数

挑战程序设计竞赛原文:

 

 

代码:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<memory.h>
 5 #include<algorithm>
 6 #define MAXN 1010
 7 #define INF 0x3f3f3f
 8 using namespace std;
 9 
10 int n,r;
11 int pos[1010];
12 
13 int main()
14 {
15     while(scanf("%d %d",&r,&n)&&(r>=0||n>=0))
16     {
17         memset(pos,0,(MAXN-1)*sizeof(int));
18         for(int i=1;i<=n;i++)
19         {
20             scanf("%d",&pos[i]);
21         }
22         pos[n+1]=INF;
23         sort(pos+1,pos+n+1);
24         int ans=0;
25         int initpos=pos[1];
26         int boundpos=pos[1];
27         for(int i=2;i<=n+1;i++)
28         {
29             if(pos[i]-boundpos<=r)
30                 initpos=pos[i];
31             else
32             {
33                 if(pos[i]-initpos<=r)
34                     continue;
35                 else
36                 {
37                     ans++;
38                     boundpos=pos[i];
39                     initpos=pos[i];
40                 }
41             }
42         }
43         printf("%d\n",ans);
44     }
45     return 0;
46 }

 

posted @ 2017-04-03 15:51  EricJeffrey  阅读(197)  评论(0编辑  收藏  举报