YbtOJ 贪心算法课堂过关 例2 雷达装置【贪心】
发布日期:2021-05-07 13:09:41 浏览次数:16 分类:原创文章

本文共 702 字,大约阅读时间需要 2 分钟。

在这里插入图片描述




思路


考虑贪心求解。
首先,为了要放最少的雷达,
我们可以在每个建筑可被侦测到的最大范围的边界上放雷达。
怎么计算范围呢》》
已知半径 d d d ,已知 y y y,发现求个勾股就搞定了。
在这里插入图片描述


C o d e Code Code


#include<algorithm>#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n,d;struct node{
double x,y,l,r;}a[30010];bool cmp(const node&a,const node&b){
return a.r<b.r;}int main(){
cin>>n>>d; for(int i=1; i<=n; i++) {
scanf("%lf%lf",&a[i].x,&a[i].y); a[i].l=a[i].x-sqrt(d*d-a[i].y*a[i].y); a[i].r=a[i].x+sqrt(d*d-a[i].y*a[i].y); if(a[i].y>d) {
cout<<-1; return 0; } } sort(a+1,a+1+n,cmp); int j=1,ans=1,js=1; while(j+js<=n) {
if(a[j].r>=a[j+js].l) js++; else j+=js,js=1,ans++; } cout<<ans; return 0;}
上一篇:YbtOJ 贪心算法课堂过关 例3 畜栏预定【贪心】
下一篇:YbtOJ 递推算法课堂过关 例5 平铺方案【递推(简单DP)】

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年03月20日 12时47分24秒