POJ1328——Radar Installation(贪心)
2016-11-28 19:07
375 查看
题目链接
题目大意是在给定的坐标系中在x轴上方有许多岛屿,然后你可以在x轴上设置雷达,雷达有探测范围d,要求尽量少的雷达将所有岛屿探测入内,如果无法搜索完全部岛屿,输出-1。先开始贪心方式错了,送了两个wrong,起先认为按横坐标从小到大排序然后更新雷达位置就行了,后来发现雷达的位置并不是随岛屿横坐标越大,就一定会更新到越大的位置,有可能会变小,所以这种想法是不对的,后来换成从雷达覆盖区间的交集来考虑才得出正确方式,还是先排序,对当前岛屿所能设置的雷达区间与先前存在的雷达区间取交集,如果有交集,证明先前设置的雷达区间交集部分仍旧能探测当前岛屿,那么久直接更新雷达区间为交集区间。如果取不到交集,那么久从新设置新的雷达,并将新的区间更新为雷达区间,每做一次这样的更新cont++即可,最后cont值即为最少所需雷达数。
题目大意是在给定的坐标系中在x轴上方有许多岛屿,然后你可以在x轴上设置雷达,雷达有探测范围d,要求尽量少的雷达将所有岛屿探测入内,如果无法搜索完全部岛屿,输出-1。先开始贪心方式错了,送了两个wrong,起先认为按横坐标从小到大排序然后更新雷达位置就行了,后来发现雷达的位置并不是随岛屿横坐标越大,就一定会更新到越大的位置,有可能会变小,所以这种想法是不对的,后来换成从雷达覆盖区间的交集来考虑才得出正确方式,还是先排序,对当前岛屿所能设置的雷达区间与先前存在的雷达区间取交集,如果有交集,证明先前设置的雷达区间交集部分仍旧能探测当前岛屿,那么久直接更新雷达区间为交集区间。如果取不到交集,那么久从新设置新的雷达,并将新的区间更新为雷达区间,每做一次这样的更新cont++即可,最后cont值即为最少所需雷达数。
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; struct node { double x; double y; node() { x=0; y=0; } } s[1005]; bool cmp(node a,node b) { if(a.x!=b.x) return a.x<b.x; else return a.y<b.y; } int main() { //freopen("in.in","r",stdin); int n; double d; int time=0; while(scanf("%d%lf",&n,&d)) { if(n==0&&d==0)break; time++; for(int i=0;i<n;i++) scanf("%lf %lf",&s[i].x,&s[i].y); sort(s,s+n,cmp); double pre_l=0, pre_r=0; int cont=0; bool flag=0; for(int i=0;i<n;i++) { if(d<s[i].y) { flag=1; break; } double now_l=s[i].x-sqrt(d*d-s[i].y*s[i].y); double now_r=s[i].x+sqrt(d*d-s[i].y*s[i].y); if(i==0) { pre_l=now_l; pre_r=now_r; cont++; continue; } if(pre_r<now_l)//无交集 { pre_l=now_l; pre_r=now_r; cont++; }else//有交集,更新交集 { if(pre_l<=now_l)pre_l=now_l; if(now_r<=pre_r)pre_r=now_r; } } if(flag)printf("Case %d: -1\n",time); else printf("Case %d: %d\n",time,cont); } return 0; }
相关文章推荐
- poj 1328 Radar Installation (贪心)
- POJ 1328:Radar Installation:贪心法
- POJ 1328 Radar Installation 【贪心 区间选点】
- POJ 1328:Radar Installation 经典贪心
- POJ 1328 贪心、快排/求最少雷达数量
- POJ 1328 贪心 Radar Installation
- poj1328 Radar Installation(贪心)
- POJ 1328 Radar Installation 贪心
- poj 1328 Radar Installation (简单的贪心)
- POJ 1328 Radar Installation(贪心)
- poj1328_Radar Installation(贪心区间解决)
- POJ 1328 Radar Installation (贪心)
- poj 1328 Radar Installation (贪心)
- POJ 1328 Radar Installation 贪心
- poj 1328 Radar Installation (贪心)
- poj1328贪心
- POJ - 1328 Radar Installation(贪心/最大不相交覆盖)
- POJ 1328 Radar Installation (贪心+线段覆盖)
- poj 1328 雷达覆盖 贪心
- POJ 1328 Radar Installation#贪心(坐标几何题)