贪心之d距离内最小保留点数
QrzWJS
·
·
个人记录
1.题目链接
2.大致题意:
给你一个d,下面n个数,问为确保这n个点的d距离内必须有点,
问需要保留多少点
3.思路解析:
从开头点t1往后面走,找到第一个使a[i]-t1大于d的点,此点前面
就是需要建立的点,cnt++;t1更新为a[i],继续求,知道i==n
注意:循环往后求的过程,记住了
4.自适应代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int a[2000];
int main()
{
int r,n;
while(scanf("%d%d",&r,&n)==2)
{
if(r==-1&&n==-1)
break;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
int cnt=unique(a,a+n)-a;
int i=0,ans=0;
while(i<cnt)
{
int s=a[i++];
while(i<cnt&&a[i]<=s+r)
i++;
int p=a[i-1];
while(i<cnt&&a[i]<=p+r)
i++;
ans++;
}
printf("%d\n",ans);
}
return 0;
}