题目
题解思路
区间贪心分为三种,此题属于区间覆盖。
我们先将点从小到大排序,如何用一个R的距离来看看能覆盖最远的点,将该点选为标记,然后继续往前覆盖R的距离以内的点。
AC代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[1010];
int main ()
{
int r,n;
while(~scanf("%d%d",&r,&n))
{
if (r == -1 )
break;
for (int i = 0 ; i < n ; i++ )
scanf("%d",&a[i]);
sort(a,a+n);
int ans =0 , le , re ;
for (int i = 0 ; i < n ; )
{
le = a[i];
i++;
while (i < n && a[i] <= le + r )
i++;
re = a[i-1], ans ++;
while( i < n && a[i] <= re + r )
i++;
}
cout<<ans<<"\n";
}
return 0;
}