http://poj.org/problem?id=3069
思路:这个点最好是在中心,这样就可以往左右覆盖,所以用贪心的想法从最左点开始算起。
#include <iostream>
#include<cstdlib>
#include<cstdio>
#include<stack>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
#include<vector>
#include<map>
#include<set>
using namespace std;
int r,n;
int x[1010];
int main()
{
while(scanf("%d %d",&r,&n)==2&&n!=-1&&r!=-1){
int i=0;
for(i=0;i<n;i++){
scanf("%d",&x[i]);
}
sort(x,x+i);
i=0;
int ans=0;
int left=x[0];
int nleft=0;
while(i<n){
left=x[i++];
while(left+r>=x[i]&&i<n)i++;
nleft=x[i-1];
while(r+nleft>=x[i]&&i<n)i++;
ans++;
}
printf("%d\n",ans);
}
return 0;
}