题目:
贪心算法,先对x[i]从小到大排序,然后从x[0]开始遍历,找到x[0]+R能覆盖的最远的点i,找到x[i]+R能覆盖的最远的点l。再以l为起点循环上述过程
AC情况:
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int x[1005];
int main() {
int R, N,cnt;
while (scanf("%d%d",&R,&N)){
if (R == N&&N == -1) break;
cnt = 0;
for (int i = 0; i < N; i++)
scanf("%d", &x[i]);
sort(x, x + N);
for (int i=0; i < N;) {
int t = i;
cnt++;
while (x[t] + R >= x[i++]);
i=t = i-2;
while (x[t] + R >= x[i++]);
i--;
}
printf("%d\n", cnt);
}
return 0;
}