简单的贪心题。。。。一开始脑子没转弯花了点时间
大体思路就是从i = 0 的时候找下一个 大于 array[0] + R的数,之后标记这个数的前一个,也就是array[i - 1],之后 再继续找 array[i-1] + R 的数
用了一个lower_bound查找的
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXD 1000 + 10
int main(){
int R,N;
int vis[MAXD];
while(scanf("%d%d",&R,&N)){
int array[MAXD];
if(R == -1 && N == - 1)
break;
memset(vis,0,sizeof(vis));
for(int i = 0; i < N ; i++)
scanf("%d",&array[i]);
sort(array,array + N);
int ans = 0;
int pos = upper_bound(array,array + N,array[0] + R) - array;
ans ++;
int d = array[pos - 1] + R;
for(int i = pos; i < N ; i++){
if(array[i] > d){
pos = upper_bound(array,array + N,array[i] + R) - array;
d = array[pos - 1] + R;
ans ++;
}
}
printf("%d\n",ans);
}
return 0;
}