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 }