雷达设备 贪心
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了雷达设备 贪心相关的知识,希望对你有一定的参考价值。
先排序:右端点小的在前,相同情况下左端点小的在前。这样遍历的第一个就是最左的。
先排右端点的原因是:一个检测器在右端点的位置更有可能也在下一个点的左端点范围内。
如果上一个检测器不在下一个点的范围内,则要多一个检测器。更新检测器位置。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define fi first
#define se second
#define mem(a,x) memset(a,x,sizeof(a));
typedef pair<double,double> pii;
//
const int N=1e3+10;
pii a[N];
bool cmp(pii aa,pii bb)
{
if(aa.se!=bb.se) return aa.se<bb.se;
else return aa.fi<bb.fi;//先要右端点小的 然后要左端点小的
}
int main()
{
int n,r;cin>>n>>r;int err=0;
for(int i=0;i<n;i++)
{
int a1,b;cin>>a1>>b;
double temp;
if(r>=b)temp=sqrt(r*r-b*b);
else
{
err=1;break;
}
a[i].fi=a1-temp;
a[i].se=a1+temp;
// // int ii=a[i].fi,jj=a[i].se;
// cout<<a[i].fi<<" "<<a[i].se<<endl;
}
if(err)
{
cout<<-1;return 0;
}
int ans=0;
sort(a,a+n,cmp);
double last=-0x3f3f3f3f;
for(int i=0;i<n;i++)
{
if(last<a[i].fi)
{
ans++;last=a[i].se;
}
}
cout<<ans;
return 0;
}
以上是关于雷达设备 贪心的主要内容,如果未能解决你的问题,请参考以下文章