/* saruman's army 给从左边开始,在圆内的最右边的点加上标记即可。 */
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX_N 1000
int r, n;
int x[MAX_N];
void solve()
{
sort(x,x+n);
int i=0,ans=0;
while(i<n) //s是没有被覆盖的最左边的位置
{
int s=x[i++];
//向右前进到距s距离大于r的点
while(i<n && x[i]<=s+r)
i++;
//p是新加的标记的点的位置
int p= x[i-1];
//一直向右前进到距p的距离大于r的点
while(i<n && x[i] <= p+r)
i++;
ans++;
}
cout<<ans<<endl;
}
int main()
{
while(cin>>n>>r)
{
for(int i=0;i<n;i++)
cin>>x[i];
if (r == -1 && n == -1) break;
else solve();
}
return 0;
}
ACM_程序设计竞赛:贪心算法:saruman army
原文作者:贪心算法
原文地址: https://blog.csdn.net/mijian1207mijian/article/details/51229167
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/mijian1207mijian/article/details/51229167
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。