poj1328 Radar Installation —— 贪心
来源:互联网 发布:it前沿技术 编辑:程序博客网 时间:2024/04/29 22:08
题目链接:http://poj.org/problem?id=1328
题解:区间选点类的题目,求用最少的点以使得每个范围都有点存在。以每个点为圆心,r0为半径,作圆。在x轴上的弦即为雷达可放置的范围。这个范围可用勾股定理求得。记录每个点的范围,然后排序,贪心。
(由于不熟悉qsort的用法,折腾了一个小时。后来清晰了:qsort 的cmp是通过正负判断(但结构体又不是),而sort的cmp是通过对错判断,即0或1。所以qsort的cmp用‘-’(结构体除外),sort的cmp用‘<’和‘>’判断,决定以后用sort,要加上<algorithem> 和 std。
代码如下:
#include<cstdio>//poj 1328 贪心#include<cmath>#include<cstdlib>#include<cstring>typedef struct{ double l,r;}edge, *E;edge e[1010];int cmp(const void *a, const void*b){ return ((E)a)->r > ((E)b)->r?1:-1;}int solve(int n){ int sum = 1; double brim = e[0].r; for(int i = 1; i<n; i++) { if(brim<e[i].l) { brim = e[i].r; sum ++; } } return sum;}int main(){ int n,B,t = 0; double r0,x,y,r; while(scanf("%d %lf",&n,&r0) && (n||r0)) { B = 1; for(int i = 0; i<n; i++) { scanf("%lf %lf",&x,&y); if(y>r0) B = 0; r = sqrt(r0*r0-y*y); e[i].l = x - r; e[i].r = x + r; } if(B) { qsort(e,n,sizeof(e[0]),cmp); printf("Case %d: %d\n",++t,solve(n)); } else printf("Case %d: -1\n",++t); } return 0;}
0 0
- poj1328——Radar Installation(贪心)
- POJ1328——Radar Installation(贪心)
- poj1328 Radar Installation —— 贪心
- POJ1328 Radar Installation 贪心
- POJ1328 Radar Installation 贪心
- 【贪心】POJ1328 Radar Installation
- poj1328 Radar Installation 贪心
- 【POJ1328】Radar Installation 贪心
- POJ1328 Radar Installation 贪心
- 贪心- poj1328 Radar Installation
- POJ1328 Radar Installation 贪心
- poj1328 Radar Installation 贪心
- poj1328 Radar Installation 贪心
- POJ1328 Radar Installation (贪心)
- POJ1328 Radar Installation(贪心)
- POJ1328 Radar Installation(贪心)
- 【贪心】[POJ1328]Radar Installation
- POJ1328-Radar Installation(贪心)
- MVP模式在Android项目中的使用
- Android各种知识图(4):Context相关
- AMP(非对称多进程处理模式)和Zynq SoC的OCM
- mysql数据类型
- 基于Spark Mllib, 使用java api操作的电影推荐系统(spark1.5.2 jdk1.7)
- poj1328 Radar Installation —— 贪心
- spring学习(六)—AOP的概念和作用
- SparkStreaming例子
- Struts2 版本不一致导致的问题
- Windows下使用xShell向阿里云ecs服务器上传文件
- 内部类
- C语言external-internal-none链接属性浅析
- 抽象类(核心)
- 高端 --- 魔兽登陆