POJ--1328
2014-01-23 14:27
357 查看
排序题
首先对x轴排序,Y轴不动,跟着x一起
然后计算海岛园左右交点,贪心一下
ps:sqrt中的数据类型一定要是double型,不然会报错QAQ。
首先对x轴排序,Y轴不动,跟着x一起
然后计算海岛园左右交点,贪心一下
ps:sqrt中的数据类型一定要是double型,不然会报错QAQ。
#include<iostream> #include<cmath> using namespace std; int island[1000+10][2+10]={0}; int Count=0; int main() { int N,d,j=1; while(cin>>N>>d&&N&d) { bool flag=true; for(int i=0;i<N;i++) cin>>island[i][0]>>island[i][1];//输入(x,y) island for(int i=0;i<N;i++)//判断是否大于雷达半径 { if(island[i][1]>d) { cout<<"-1"<<endl; flag=false; break; } } if(!flag) continue; for(int i=0;i<N;i++)//排序 { int key=i; int Min=island[i][0]; for(int j=i+1;j<N;j++) if(island[j][0]<Min) { Min=island[j][0]; key=j; } if(key!=i) { int temp,temp_; temp=island[key][0],temp_=island[key][1]; island[key][0]=island[i][0],island[key][1]=island[i][1]; island[i][0]=temp,island[i][1]=temp_; } } double temp; double left[1000+10],righ[1000+10]; //海岛圆在海岸线上的左右交点 for(int i=0;i<N;i++) { left[i]=island[i][0]-sqrt((double)(d*d-island[i][1]*island[i][1])); righ[i]=island[i][0]+sqrt((double)(d*d-island[i][1]*island[i][1])); } int radar=1; for(int i=0,temp=righ[0];i<N-1;i++) if(left[i+1]>temp) { temp=righ[i+1]; radar++; } else if(righ[i+1]<temp) temp=righ[i+1]; cout<<"Case "<<j++<<": "<<radar<<endl; } return 0; }
相关文章推荐
- poj 1328 Radar Installation 已知一定数量的区间,求最小数量的点,使得每个区间内斗至少存在一个点 贪心
- POJ1328——贪心——Radar Installation
- POJ 1328 Radar Installation
- poj1328-DP
- poj 1328 【Radar Installation】【几何转化、区间覆盖】
- poj-1328-Radar Installation
- poj 1328 贪心+qsort
- POJ 1328 Radar Installation(贪心)
- POJ 1328、Radar Installation 贪心
- 【贪心算法】POJ-1328 区间问题
- 贪心-poj-1328-Radar Installation
- POJ 1328 Radar Installation【贪心】
- YY->POJ 1328
- poj 1328
- poj1328 Radar Installation 贪心
- Poj 1328 贪心
- POJ 1328 Radar Installation
- POJ 1328
- poj 1328 贪心
- POJ 1328 Radar Installation(贪心)