本题利用贪心法计算最少的点数,问题本不难,但如何简洁高效的实现算法,却很讲究技巧:
题目的连接:点击打开链接
//#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1002;
int X[N];
int main()
{
int R,n;
while(cin>>R>>n&&R!=-1&&n!=-1){
for(int i=0;i!=n;i++)
cin>>X[i];
sort(X,X+n); //排序
int i=0,res=0;
while(i<n){
int s=X[i]; //记录未被覆盖的起点
while( i<n && X[i]-s<=R){ i++; }
i--;
s=X[i]; //寻找中心点
while( i<n && X[i]-s<=R){ i++; }//寻找位于中心点右侧且距离小于等于R的点
res++;
}
cout<<res<<endl;
}
return 0;
}