题意:
x轴上有n点,每个点都有一个覆盖距离m,求最少需要多少个点可以把所有的点覆盖。。。
这里主要是要找以那个点为中心。
比如1 7 15 20 30 50 70(m=10)
刚开始用1为中心,它的覆盖距离为1-11,因为7在范围内,所以可以以7为中心,以7为中心,可以把15覆盖。ans++;
然后再以20为中心,可以找到30在20的范围内,所以更新中心点为30,然后去掉30-40范围内的点,ans++;
依此类推。。。。
综上,每次现以一个点a为中心,然后看看能否更新中心(即是否有某个点在a的距离内),然后去掉新的中心里面的点。。。
#include"stdio.h"
#include"string.h"
#include"algorithm"
using namespace std;
#define N 1005
int main()
{
int i;
int n,m;
int A[N];
while(scanf("%d%d",&m,&n)!=-1)
{
if(m==-1&&n==-1)break;
for(i=0;i<n;i++)
scanf("%d",&A[i]);
sort(A,A+n);
int ans=1;
int p=A[0]+m;
i=1;
while(i<n)
{
while(i<n&&A[i]<=p)i++;
if(i>=n)break;
p=A[i-1]+m;
while(i<n&&A[i]<=p)i++;
if(i>=n)break;
p=A[i]+m;
ans++;
}
printf("%d\n",ans);
}
return 0;
}