Radar Installation--POJ 1328
2010-08-18 21:14
134 查看
1、题目类型:贪心算法。
2、解题思路:(1)将所有的岛转换为对海岸线上雷达位置的区间;(2)对所有岛的区间按照其right进行排序;(3)遍历搜索需要增加的雷达数。
3、注意事项:遍历中一旦发现重叠既用flag[]标示;当y>d时,输出-1。
4、实现方法:
2、解题思路:(1)将所有的岛转换为对海岸线上雷达位置的区间;(2)对所有岛的区间按照其right进行排序;(3)遍历搜索需要增加的雷达数。
3、注意事项:遍历中一旦发现重叠既用flag[]标示;当y>d时,输出-1。
4、实现方法:
#include<iostream> #include<algorithm> #include<math.h> using namespace std; #define Max 1010 struct TRange{ double left,right; }; TRange range[Max]; bool flag[Max],mark; int cmp(const TRange &n1,const TRange &n2) { if(n1.right!=n2.right) return n1.right<n2.right; else return n1.left<n2.left; } int main() { int i,j,n,d,cnt,num=0; double x,y,tmp; while((cin>>n>>d) && (n||d)) { num++; mark=false; memset(range,0,sizeof(range)); memset(flag,0,sizeof(flag)); for(i=0;i<n;i++) { cin>>x>>y; if(y>d) { mark=true; } tmp=sqrt(pow((double)d,2)-pow((double)y,2)); range[i].left=x-tmp; range[i].right=x+tmp; } sort(range,range+n,cmp); cnt=-1; if(!mark) { cnt++; for(i=0;i<n;i++) { if(flag[i]) continue; cnt++; flag[i]=true; for(j=i+1;j<n;j++) { if(range[i].right>=range[j].left) { flag[j]=true; } else { break; } } } } cout<<"Case "<<num<<": "<<cnt<<endl; } return 0; }
相关文章推荐
- 貪心::poj1328 radar installation && poj2109 Power of Cryptography && poj2586 Y2K Accounting Bug
- POJ 1328 Radar Installation
- POJ - 1328 Radar Installation 贪心
- poj解题报告——1328
- POJ 1328-Radar Installation
- Radar Installation POJ - 1328 贪心(区间覆盖)
- poj1328
- poj 1328 Radar Installation
- POJ 1328 Radar Installation(雷达布防)
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation(区间贪心)
- POJ 1328:Radar Installation
- POJ 1328, Radar Installation
- POJ1328 radar installation (Greedy)
- POJ 1328 Radar Installation(贪心)
- poj 1328 贪心算法和快排(快排细节)
- POJ:1328 特别注意flag的使用地点
- poj 1328 Radar Installation (贪心)
- POJ 1328 Radar Installation (贪心)
- POJ-1328-Radar Installation