题意:给你n个点,标记其中尽可能少的点,使得n个点都处于被标记点左右不超过R的区间内,可以理解为蜡烛照亮所有的地方,蜡烛只能放在出现的点处。
先排序,然后贪心。
#include <iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define N 1005
int a[N];
int main()
{
int r,n;
while(~scanf("%d%d",&r,&n)&&!(r==-1&&n==-1))
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
int pos=0;
int ans=0;
for(int i=1;i<n;i++)
{
if(a[i]-a[pos]>r)
{
ans++;
int cen=a[i-1];//标记i-1
for(;i<n;i++)
{
if(cen+r<a[i])//判断右边
break;
}
if(i<n)
pos=i;
}
else if(i==n-1)//如果最后一个出现时,还没达到a[pos]+r,也就是还没标记,所以加一
{
ans++;
}
}
if(pos==n-1)//最后一个未被覆盖。
ans++;
printf("%d\n",ans);
}
return 0;
}