poj 1328 贪心
来源:互联网 发布:厦门公安局网络刻章 编辑:程序博客网 时间:2024/06/07 07:28
http://poj.org/problem?id=1328
题意:平面上有一些点,现要求用一些圆心在x轴上的圆(雷达)来覆盖这些点,问最少需要多少雷达。
把每个点的放置雷达的区间求出,然后按照区间排序。排好序后,从左至右看,当发现下一个区间的起始点大于前面所有区间的最小结束点的时候,答案加一。else 如果下一个区间的起始点小于等于的话,并且区间的终点也小于雷达所在的点,那么雷达所在的点更新为该区间的终点。 简单的贪心算法。。
把雷达所在的点放到所有区间的起始点或终点,是我感觉这道题
#include <cstdio>#include <iostream>#include <string.h>#include <stdlib.h>#include <fstream>#include <math.h>#include <algorithm>#define INF 0x3f3f3f3fusing namespace std;//const double PI = acos(-1.0); const int maxn=1005;int n;double d;struct point{double l;double r;}p[maxn];bool cmp(point a,point b){return a.l < b.l;}int main(){//ifstream cin("input.txt");int kase=0;while(cin>>n>>d,n){int ok=1;double x,y;for(int i=0;i<n;i++){cin>>x>>y;if(y>d) ok=0;double dx=sqrt(d*d-y*y);p[i].l=x-dx,p[i].r=x+dx;}if(ok==0) {printf("Case %d: -1\n",++kase);continue;}sort(p,p+n,cmp);int ans=1;double radar=p[0].r;for(int i=1;i<n ;i++){if(p[i].l>radar) ans++,radar=p[i].r;else {if(p[i].r<radar) radar=p[i].r;}}printf("Case %d: %d\n",++kase,ans );}return 0;}
不太好想的地方,之后贪心的思路比较简单。
0 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 贪心
- Swing组件设置背景
- @class 和 #import 的区别
- Java Generics 特例
- 通过python下的socket实现组播数据的发送和接收
- 题目1124:Digital Roots
- poj 1328 贪心
- Maven项目管理实战(三)--创建Web App
- VC WMI应用获取SMBios中的信息
- NYOJ255 C小加 之 随机数
- <<Oracle数据库性能优化艺术(第五期)>> 第3周 Latch
- 黑马程序员—18—java基础:有关IO流的学习笔记和学习心得体会
- 史上最全最强大的VIM学习资料
- A公司的烦恼-贪心
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四)