您的位置:首页 > 其它

POJ--1328

2014-01-23 14:27 357 查看
排序题

首先对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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: