雷达设备 贪心

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; 
}

以上是关于雷达设备 贪心的主要内容,如果未能解决你的问题,请参考以下文章

贪心例题

贪心雷达问题

贪心雷达问题

贪心poj1328:雷达设置

阶段性总结-贪心算法

贪心问题