#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++代码实现。该算法通过排序和双指针技术来解决如何用最少数量的固定半径圆覆盖一维平面上的点集问题。代码首先对点集进行排序,然后使用两个指针逐步推进,确保每个点都被至少一个圆覆盖。
950

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



