#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX_N 2000
int N,R;
int X[MAX_N];
void solve()
{
sort(X,X+N);
int i=0,ans=0;
while(i<N)
{
int s=X[i++];
while(i<N&&X[i]<=s+R)
i++;
int p=X[i-1];
while(i<N&&X[i]<=p+R)
i++;
ans++;
}
printf("%d\n",ans);
}
int main()
{
printf("N R:\n");
scanf("%d %d",&N,&R);
printf("X[%d]:\n",N);
for(int i=0;i<N;i++)
{
scanf("%d",&X[i]);
}
solve();
return 0;
}
Saruman's Army
最新推荐文章于 2021-05-10 21:46:50 发布
本文介绍了一个关于区间覆盖的问题,并提供了一段C++代码实现。该算法通过排序和双指针技术来解决如何用最少数量的固定半径圆覆盖一维平面上的点集问题。代码首先读取点的数量和圆的半径,接着读取每个点的位置并进行排序,最后通过迭代找到最佳的覆盖方案。
994

被折叠的 条评论
为什么被折叠?



