您的位置:首页 > 其它

POJ 1328

2016-05-10 00:50 369 查看
题意:给你n个海岛,一个d,代表雷达范围,每个海岛的坐标,现在你只能在x轴上建雷达,问探测到所有海岛最少需要多少个雷达,如果不能探测到所有的,输出-1。

做法:贪心,将每个灯塔预处理为[l,r]范围,然后问题就变成了,给你n个区间,用最少的点使得所有的区间都至少含有一个点。

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
struct node{
double x,y;
}e[1005];
bool cmp(node a,node b){
return a.x<b.x;
}
double a[1005];
int main(){
int n,i,j,csa=1;
double d,x,y;
while(cin>>n>>d){
if(n==0&&d==0)break;
int flag=1;
for(i=1;i<=n;i++){
scanf("%lf%lf",&x,&y);
e[i].x=x-sqrt(d*d-y*y);
e[i].y=x+sqrt(d*d-y*y);
if(y>d)flag=0;
}
sort(e+1,e+1+n,cmp);
int cnt=1;
cout<<"Case "<<csa++<<": ";
if(!flag)cout<<"-1"<<endl;
if(!flag)continue;
node temp=e[1];
for(i=2;i<=n;i++){
if(e[i].x>temp.y){
cnt++;
temp=e[i];
}
else if(e[i].y<temp.y){
temp=e[i];
}
}
cout<<cnt<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: