当前位置: 首页 > news >正文

POJ 1328 Radar Installation贪心算法

题意
在一个平面直角坐标系上,有n个给出坐标的岛屿,问在X轴上至少需要放置多少个半径为d的雷达可以遍布所有岛屿?(若无法遍布所有岛屿则输出-1)

样例输入
3 2
1 2
-3 1
2 1

1 2
0 2

0 0

样例输出
Case 1: 2
Case 2: 1

思路
先求出各个岛屿能被搜索到的放置雷达区间,排序(也可用优先队列),然后把存在重叠部分的区间算作1个雷达,最终得到的雷达个数即为正解,即用最少的点去遍布所有的区间。无解的情况即为某岛屿的纵坐标大于雷达的半径,因此在读入数据时即可作出判断。

注意点
边界情况

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <math.h>
 4 #include <vector>
 5 #include <queue>
 6 using namespace std;
 7 const int N = 1010;
 8 int xisland[N], yisland[N];
 9 
10 struct node{
11     double left, right;
12 }node[N];
13 
14 struct cmp{
15     bool operator () (const int a, const int b) const{
16         return node[a].left > node[b].left ? 1 : node[a].left == node[b].left ? node[a].right < node[b].right : 0;
17 }};
18 
19 double range(int y, int rf){
20     return sqrt(rf - pow((double)y, 2));
21 }
22 
23 void work(int n, int d, int rf, int kase)
24 {
25     int num = 0;
26     double temp, l, r;
27     priority_queue<int, vector<int>, cmp> pq;
28     for(int i=0; i<n; ++i)
29     {
30         scanf("%d %d", xisland+i, yisland+i);
31         if(yisland[i] > d)
32         {
33             for(++i; i<n; ++i)
34                 scanf("%d %d", xisland+i, yisland+i);
35             printf("Case %d: -1\n", kase);
36             return ;
37         }
38         temp = range(yisland[i], rf);
39         node[i].left = (double)xisland[i] - temp;
40         node[i].right = (double)xisland[i] + temp;
41         pq.push(i);
42         printf("%d %lf %lf\n", kase, node[i].left, node[i].right);
43     }
44     for(; !pq.empty(); ++num)
45     {
46         l = node[pq.top()].left;
47         r = node[pq.top()].right;
48         pq.pop();
49         while(!pq.empty() && node[pq.top()].left <= r)
50         {
51             l = node[pq.top()].left > l ? node[pq.top()].left : l;
52             r = node[pq.top()].right < r ? node[pq.top()].right : r;
53             pq.pop();
54         }
55     }
56     printf("Case %d: %d\n", kase, num);
57 }
58 
59 int main(void)
60 {
61     int n, d;
62     for(int kase=0; scanf("%d %d", &n, &d), n||d; )
63         work(n, d, d*d, ++kase);
64     return 0;
65 }

测试数据

3 2
1 2
-3 1
2 1

1 2
0 2

2 5
-3 4
-6 3

4 5
-5 3
-3 5
2 3
3 3

20 8
-20 7
-18 6
-5 8
-21 8
-15 7
-17 5
-1 5
-2 3
-9 6
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 7
9 6
10 5
0 0

2 3
0 2
2 3

2 3
0 2
1 3

3 3
1 2
-3 2
2 4

8 5
2 4
-4 4
-3 3
-3 1
-3 0
-1 0
0 5
6 0

3 0
1 2
-3 1
2 1

3 2
1 2
-3 1
2 1

1 2
0 2

2 3
0 2
2 3

4 -5
4 3
4 3
2 3
6 -9

3 -3
1 2
-3 2
2 1

6 2
1 2
1 2
1 2
-3 1
2 1
0 0

1 2
0 2

2 3
0 2
1 3

3 10
1 10
2 3
4 5

3 5
1 10
2 3
4 5

4 7
1 10
2 3
4 5
0 0

3 9
1 10
2 3
4 5

0 0
in
Case 1: 2
Case 2: 1
Case 3: 1
Case 4: 2
Case 5: 4
Case 6: 1
Case 7: 1
Case 8: -1
Case 9: 3
Case 10: -1
Case 11: 2
Case 12: 1
Case 13: 1
Case 14: -1
Case 15: -1
Case 16: 2
Case 17: 1
Case 18: 1
Case 19: 1
Case 20: -1
Case 21: -1
Case 22: -1
out

 

转载于:https://www.cnblogs.com/corvey/p/5263688.html

相关文章:

  • 分享我的第一次Selenium自动化测试框架开发过程
  • Android 透明度对照表
  • git命令
  • 高级查询
  • Scott Guthrie访谈:定制仪表板与Azure Monitor
  • 打包新版本上传到AppStore时报错 ERROR ITMS-90034:
  • Eclipse导入项目:No projects are found to import
  • SLF4J - 借助SLF4J, 统一适配所有日志实现为logback日志实现的实践
  • js作用域和this的理解
  • 关于通知方法递增式调用解决方案
  • log4j 转载
  • javascript常识
  • Eclipse 安装反编译插件jadclipse
  • 从交互式到智能触控:品道智宴冰箱引领新生活
  • 一个样例让你明确原型对象和原型链
  • 【个人向】《HTTP图解》阅后小结
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • JavaScript对象详解
  • Koa2 之文件上传下载
  • Mac转Windows的拯救指南
  • Node + FFmpeg 实现Canvas动画导出视频
  • php ci框架整合银盛支付
  • React+TypeScript入门
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • RxJS: 简单入门
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vultr 教程目录
  • windows-nginx-https-本地配置
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 实习面试笔记
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 正则与JS中的正则
  • ​人工智能书单(数学基础篇)
  • # 透过事物看本质的能力怎么培养?
  • #android不同版本废弃api,新api。
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (java)关于Thread的挂起和恢复
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 发展历程
  • .NET 使用配置文件
  • .NetCore部署微服务(二)
  • .net程序集学习心得
  • .Net的C#语言取月份数值对应的MonthName值
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [Flutter]WindowsPlatform上运行遇到的问题总结
  • [HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [noip2015 d1t2] 信息传递