您的位置:首页 > 其它

POJ 1328 Radar Installation

2013-01-22 20:45 381 查看
此题纯属贪心,由于我是菜鸟,A了半天没结果,只好借鉴大神们的思路。题意就不说了,直接说思路吧。首先题目要求雷达要覆盖海中的岛屿,什么情况下岛屿才会被覆呢?也就是修建的雷达到岛屿的距离要小于雷达的覆盖半径这样就会想到以岛屿为圆心做圆,与岸边的交点就是可以覆盖这个岛屿的雷达的修建区间,我们确定好每个岛屿的雷达修建区间后对这些区间进行排序,比较一下就可以了,一定要注意被覆盖的区间哦!

#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
struct sa{
double left;
double right;
}data[10000];
int cmp(sa a,sa b)
{
return a.left<b.left;
}

int main()
{
int n,d,count=1;
while(scanf("%d%d",&n,&d)&&(d||n))
{
int x,y,w=1,leida=1;
for(int a=0;a<n;a++)
{
scanf("%d%d",&x,&y);
if(w==1&&d>=y)
{
data[a].left=x-sqrt((double)(d*d-y*y));
data[a].right=x+sqrt((double)(d*d-y*y));
}
else w=0;
}
if(w==0)
{
printf("Case %d: -1\n",count++);
continue;
}
sort(data,data+n,cmp);
double max=0;
max=data[0].right;
for(int b=1;b<n;b++)
{
if(data[b].left>max)
{
leida++;
max=data[b].right;
}
else
{
if(data[b].right<max)
{
max=data[b].right;
}

}
}
printf("Case %d: %d\n",count++,leida);
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: