Saruman's Army
题目链接:
http://poj.org/problem?id=3069
解题思路:
代码里已经写的很清楚了。。。贪心就行了。。。
AC代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,r;
int a[1010];
void solve(){
sort(a,a+n);
int i = 0, ans = 0;
while(i < n){
//s是没有被覆盖的最左的点的位置
int s = a[i++];
//一直向右前进直到距s的距离大于R的点
while(i < n && a[i] <= s+r)
i++;
//p是新加上标记的点的位置
int p = a[i-1];
//一直向右前进直到距p的距离大于R的点
while(i < n && a[i] <= p+r)
i++;
ans++;
}
printf("%d\n",ans);
}
int main(){
while(~scanf("%d%d",&r,&n)){
if(r == -1 && n == -1)
break;
for(int i =0; i < n; i++)
scanf("%d",&a[i]);
solve();
}
return 0;
}