POJ1328贪心放雷达
来源:互联网 发布:小提琴 曲 知乎 编辑:程序博客网 时间:2024/04/29 01:48
题意:
有一个二维坐标,y>0是海,y<=0是陆地,然后只能在y=0的岸边上放雷达,有n个城市需要被监控,问最少放多少个雷达。
思路:
有一个二维坐标,y>0是海,y<=0是陆地,然后只能在y=0的岸边上放雷达,有n个城市需要被监控,问最少放多少个雷达。
思路:
贪心去做就行了,其实题目不难但是这个题目过的并不怎么顺利,哎!,一开始我的想法是按照x排序,然后从左往右一个一个放置雷达,第一个放在第一个点相切的右侧,....结果果断wa了,然后就又想到可以求出每个城市的可放置区间,然后去贪心,还是wa了,原因是排序的时候还是按照x从小到大排序的,后来看了讨论区一眼,才把排序是按照左区间排序的,一开始隐约考虑过这个,但是感觉按照x排没有错(一开始的想法),还有就是这个题目的数据比较坑人,要考虑d是负数或者y是负数的情况,如果全面的想,d是负数的话,如果所有的y都<=0那么输出0,否则就输出-1,如果y有大于0的,同时最大的y比b大,那么就输出-1,然后就是正常贪心,贪心的时候遇到y<0的点直接跳过去不考虑,有点小坑啊,不过是一个不错的简单题。
#include<math.h>#include<stdio.h>#include<string.h>#include<algorithm>#define N 1000 + 10using namespace std;typedef struct{ double l ,r; int id;}REG;REG reg[N];int mark[N];bool camp(REG a ,REG b){ return a.l < b.l;}double minn(double x ,double y){ return x < y ? x : y;}double maxx(double x ,double y){ return x > y ? x : y;}int main (){ int n ,l ,i ,d ,x ,y ,cas = 1; while(~scanf("%d %d" ,&n ,&d) && n + d) { int jude1 = 0 ,jude2 = 0; memset(mark ,0 ,sizeof(mark)); for(i = 1 ;i <= n ;i ++) { scanf("%d %d" ,&x ,&y); if(y > 0) jude1 = 1; if(y > d) jude2 = 1; reg[i].l = x - sqrt(d * d * 1.0 - y * y * 1.0); reg[i].r = x + sqrt(d * d * 1.0 - y * y * 1.0); reg[i].id = i; if(y <= 0) mark[i] = 1; } printf("Case %d: " ,cas ++); if(!jude1) { printf("0\n"); continue; } if(jude2) { printf("-1\n"); continue; } double nowxl ,nowxr; int ansSum = 0; sort(reg + 1 ,reg + n + 1 ,camp); for(i = 1 ;i <= n; ++i) { if(mark[reg[i].id]) continue; if(i == 1 || reg[i].l > nowxr) { ansSum ++; nowxl = reg[i].l; nowxr = reg[i].r; } else { nowxl = maxx(nowxl ,reg[i].l); nowxr = minn(nowxr ,reg[i].r); } } printf("%d\n" ,ansSum); } return 0;}
0 0
- POJ1328贪心放雷达
- poj1328 区间贪心 雷达覆盖岛屿
- POJ1328-雷达装置
- POJ1328贪心
- POJ1328--贪心
- poj1328(贪心)
- poj1328 贪心
- poj1328 贪心
- poj1328 贪心
- poj1328贪心
- POJ1328(贪心)
- poj1328贪心
- poj1328 贪心
- POJ1328 贪心
- poj1328贪心
- poj1328-贪心
- POJ1328 贪心
- 贪心poj1328
- 在数据库中用 UUID 来做ID
- tomcat单独启动时闪退的解决办法,以及修改端口8080为80,
- 将表达式转换成逆波兰式
- AOV网的所有拓扑排序实现的代码
- 软件调试实战入门(2)
- POJ1328贪心放雷达
- 类型“System.ComponentModel.PropertyChangedEventManager”未标记为可序列化
- 链表(找中间+判循环+逆序+)
- 链表基本操作
- 集合中迭代器的2中方式
- POJ2118基础矩阵快速幂
- java多进程 -CD7-孙鑫-(4)-同步方法,同步块,售票例子
- 第四周 项目二:对象作为数据成员
- What Is 'SSL'? What Is 'SSH'?