poj 1328 贪心
来源:互联网 发布:c语言更相减损术 编辑:程序博客网 时间:2024/06/18 14:48
题意:求可以覆盖海上的所有小岛的雷达的个数。
思路:如果有小岛的y坐标大于雷达半径,则输出‘-1’,结束。否则,对每个小岛,求可覆盖到它的雷达的坐标的区间[left, right],按照left的值对小岛从小到大排序,然后每次取右端最靠左的小岛作为雷达的位置,这样可以覆盖尽量多的其它小岛,当某个小岛的left值也大于了当前雷达的位置,就不得不新增加雷达了,这样直到结束。
我的代码:
1328Accepted200K32MSC++969B#include <cstdio>#include <cmath>#include <algorithm>using namespace std;struct node{double l, r;//left, right}is[1005];bool cmp(node a, node b){return a.l < b.l;}int main() {int n, d, ncase = 0, x, y;double right;while(scanf("%d%d",&n, &d) && (n || d)){printf("Case %d: ", ++ncase);int num=1, flag = 1, i;for(i = 0; i<n; ++i){scanf("%lf %lf",&x, &y);if(y > d) {flag = 0;//printf("-1\n");//以下两行是我写下的神码,当时脑子真灌水了。//break;//这句让程序排便不通畅。}double temp = sqrt(d * d - y * y);is[i].l = x - temp;is[i].r = x + temp;}getchar();//发现这个写不写都可以,我知道的太少了。sort(is, is + n, cmp);if(!flag) printf("-1\n");for(right = is[0].r, i = 1; i<n; ++i)//forward to right{if(right > is[i].r) {right = is[i].r;}else if(right < is[i].l){num ++;right = is[i].r;}}if(flag) printf("%d\n", num);}return 0;}
- POJ 1328 贪心
- poj 1328 贪心
- Poj 1328 贪心
- POJ 1328(贪心)
- poj 1328 贪心
- POJ 1328 贪心
- POJ-1328(贪心算法)
- POJ 1328 贪心算法
- poj.1328贪心
- poj 1328 贪心
- poj 1328 贪心
- poj 1328 贪心 水题
- poj 1328(贪心)
- POJ 1328(贪心)
- poj 1328 贪心
- POJ 1328(排序+贪心)
- poj 1328 贪心
- POJ 1328 贪心
- 谈数据库二
- vs2008使用技巧推荐
- java 所有异常类型
- VS 2010 与 .NET 4 系列 - 目录
- 破解学习笔记-----不脱壳破解
- poj 1328 贪心
- VS2010与.NET4.0 系列 1. 干净的Web.config文件
- JVM内存结构
- Sphere Longest Common Substring 【后缀自动机+ac自动机】
- Java中运行时内存结构补充
- VS2010与.NET4.0 系列 2. 项目入门模板
- blog推荐
- Anatomy of a Program in Memory(程序运行时内存结构)
- wamp 搭建zendframework环境