Radar Installation POJ
来源:互联网 发布:淘宝卖家诈骗过程 编辑:程序博客网 时间:2024/06/05 01:56
点击打开链接
以每个岛屿为中心 以d为半径做圆 圆与x轴相交部分即是想要覆盖这个岛屿时雷达位置的可选区间
贪心策略就是以每个区间的右端点向右扫(记为p) 即假设雷达站建在这个区间的最右端 在满足覆盖当前岛屿的条件下 尽量为覆盖其后岛屿创造有利条件
如果p够不到下一个区间 就说明需要新建雷达站 更新p值
如果p能够到 就看当前这个区间的右端点是不是比p要小
如果比p小 考虑到我们要把这个雷达站建在p处 当前这个岛屿就无法覆盖 所以为了照顾当前岛屿 要把雷达站建的更近一些 即把p更新为当前岛屿区间的右端点(这点容易忽略)
否则继续扫
#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>using namespace std;struct node{ double l; double r;};node line[1010];double r;int n;bool cmp(node n1,node n2){ if(n1.l==n2.l) { return n1.r>n2.r; } else { return n1.l<n2.l; }}int main(){ double x,y,p; int cas,i,j,flag,ans; cas=1; while(scanf("%d%lf",&n,&r)!=EOF) { if(n==0&&r==0) break; flag=1; for(i=1;i<=n;i++) { scanf("%lf%lf",&x,&y); if(y>r) flag=0; line[i].l=x-sqrt(r*r-y*y); line[i].r=x+sqrt(r*r-y*y); } if(flag==0) { printf("Case %d: -1\n",cas++); continue; } sort(line+1,line+n+1,cmp); p=line[1].r; ans=1; for(i=2;i<=n;i++) { if(line[i].l>p) { p=line[i].r; ans++; } else if(line[i].r<p) { p=line[i].r; } } printf("Case %d: %d\n",cas++,ans); } return 0;}
阅读全文
0 0
- POJ 1328 "Radar Installation"
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ Radar Installation
- POJ 1328 Radar Installation
- 1328 poj Radar Installation
- poj 1328 Radar Installation
- POJ 1238 Radar Installation
- POJ 1328 Radar Installation
- poj 1328 Radar Installation
- POJ 1382 Radar Installation
- poj 1328 Radar Installation
- POJ 1328 Radar Installation
- poj 1328.Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328.Radar Installation
- user版本打开LOG
- 导入sun.misc.BASE64Encoder等类报错的解决方法
- Redis必知必会
- Android音乐播放模式切换-外放、听筒、耳机
- vue全家桶-音乐播放器
- Radar Installation POJ
- unity做可视化音乐播放器_可视化音乐篇
- 图像常用概念解析
- Android 微信支付
- 用服务器触发器统计登录情况
- unity做可视化音乐播放器_生成图形篇(圆形)
- 先验概率与后验概率、似然函数
- 7-15 PAT Judge
- 台大DL-week2笔记