贪心好题
大体思路是按照右端点排序,每次选最靠前的没有被覆盖的区间的右端点放一个点,自己画画图就会发现非常有道理
代码
//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=1500;
int n,m;
int x[M],jud[M];
inline int read()
{
int x=0;char ch=getchar();
while (ch>'9'||ch<'0') ch=getchar();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x;
}
signed main()
{
while (cin>>m>>n&&m!=-1&&n!=-1)
{
int ans=0;
for (int i=1;i<=n;i++) x[i]=read();
sort(x+1,x+n+1);
for (int i=1;i<=n;i++)
{
int e=i+1;ans++;
while (e<=n&&x[e]<=x[i]+m) e++;
int emm=x[e-1];
while (e<=n&&x[e]<=emm+m) e++;
i=e-1;
}
cout<<ans<<endl;
}
return 0;
}