poj 1328(贪心)
来源:互联网 发布:京东和淘宝年销售额 编辑:程序博客网 时间:2024/05/16 10:44
题目意思:
就是在一条水平线上放雷达,每个雷达有一个扫描范围,求所有的岛屿都能扫描到时所需要的最少的雷达个数。
思路:
先对每一个岛屿做一次处理,算出可以扫描到他们的雷达可以放在水平线上的范围,每一个岛屿都
对应一个水平线上的区间,这样就转化 到了一条线上了,当然雷达放在区间最右面更节省,所以最左面的雷达先放
在右边缘,设为max然后对2---n这些点进行遍历,next表示下一个点,(区间为了(left,right));如果
left大于max,则雷达个数加1;否则,看right是否小于max,若是则更新max值为right,否则继续向后遍历。
注意:当存在坐标的纵坐标大于d值的时候将不会别雷达检测到,这样输出-1.
终于过了,wa了好多好多次,最后还是从网上找了一篇题解,对比着找错误,原来我用qsort函数的时候
cmp返回值有可能不是整数,而是一个0到1之间的小数,就在这个地方跪了好多次将近3个小时才把他给A了,这么
简单的贪心算法,,所以以后做题一定要加倍细心,好好想想怎么写,不能有一点思路就敲代码要深思熟虑才是,嘿
嘿,a_jie现在估计在帮我抄马原论文,我一定会努力的,为了我们的将来
贴代码:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>typedef struct{double x,y;}node;node map[1005];int cmp(const void *a,const void *b){if(((node *)a)->x==((node *)b)->x)return ((node *)a)->y-((node *)b)->y;return ((((node *)a)->x-((node *)b)->x)>0)?1:-1;}/*int qsort(int s,int t){ int i,j; double mid,tmp; i=s;j=t;mid=map[(i+j)/2].x; while (i<=j) { while (map[i].x<mid) i++; while (map[j].x>mid) j--; if (i<=j) { tmp=map[i].x;map[i].x=map[j].x;map[j].x=tmp; tmp=map[i].y;map[i].y=map[j].y;map[j].y=tmp; i++; j--; } } if (s<j) qsort(s,j); if (i<t) qsort(i,t); }*/int main() {int n,i,j,d,x,y,count=0;while(scanf("%d%d",&n,&d),n!=0||d!=0){count++;int flag=0;for(i=1;i<=n;i++){scanf("%d%d",&x,&y);if(y>d||d<0){ flag=1; }if(flag==0){ map[i].x=x-sqrt(d*d*1.0-y*y*1.0); map[i].y=x+sqrt(d*d*1.0-y*y*1.0); }}if(flag){ printf("Case %d: %d\n",count,-1); continue;}qsort(map+1,n,sizeof(map[0]),cmp);//qsort(1,n);//for(i=1;i<=n;i++)//printf("x=%f y=%f\n",map[i].x,map[i].y); double max=map[1].y;int ans=1;for(i=2;i<=n;i++){if(map[i].x>max){ ans++; //if(map[i].y>max) max=map[i].y; }else if(map[i].y<max)max=map[i].y;}printf("Case %d: %d\n",count,ans);}return 0;}另外贴一段快排的代码,省的以后想掌握时找不到模板:
int qsort(int s,int t){ int i,j; double mid,tmp; i=s;j=t;mid=map[(i+j)/2].x; while (i<=j) { while (map[i].x<mid) i++; while (map[j].x>mid) j--; if (i<=j) { tmp=map[i].x;map[i].x=map[j].x;map[j].x=tmp; tmp=map[i].y;map[i].y=map[j].y;map[j].y=tmp; i++; j--; } } if (s<j) qsort(s,j); if (i<t) qsort(i,t); }qsort(1,n);
0 0
- POJ 1328(贪心)
- poj 1328(贪心)
- POJ 1328(贪心)
- POJ 1328(贪心)
- POJ 1328 (贪心)
- POJ-1328(贪心)
- Radar Installation(POJ 1328)(贪心)
- POJ——1328(贪心)
- POJ 1328 - Radar Installation(贪心)
- POJ 1328 Radar Installation(贪心)
- POJ 1328 Radar Installation(贪心)
- poj 1328 Radar Installation (贪心)
- poj 1328 Radar Installation (贪心)
- poj 1328 Radar Installation(贪心)
- poj 1328 Radar Installation (贪心)
- POJ 题目1328 Radar Installation(贪心)
- POJ 1328 Radar Installation(贪心)
- poj 1328 Radar Installation (贪心)
- Pomelo:网易开源基于 Node.js 的游戏服务端框架
- 数据统计分析的归一化问题
- 关于GDB调试go语言程序中出现 os.Args无法打印的问题
- WPF常用控件属性
- Android中处理崩溃异常
- poj 1328(贪心)
- 多线程死锁调试小技巧
- iOS 上传头像 裁剪
- 浩易南:成功和环境有关吗
- uva 11542 Square (高斯消元)
- 千术教程,千术揭秘,麻将技巧,扑克千术揭秘
- Python之函数
- OSCache源码阅读(一)
- 栈帧,局部变量表,操纵数栈()