POJ1328-Radar Installation

来源:互联网 发布:淘宝海报多少钱一张 编辑:程序博客网 时间:2024/06/16 07:29

这题换一个思路,从每个炮塔在地平线上被雷达覆盖时,有一个雷达可安装的范围区间,如果出现区间重叠说明重叠部分只需要一个雷达。这样一来,就变成区间贪心问题,求最少几个雷达覆盖所有区间。

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;struct node{   double l,r;}a[1010];double x[1010],y[1010];bool cmp(node a,node b){    return  a.l<b.l;}int main(){    int n,t=0;    double d;    while(~scanf("%d %lf",&n,&d)&&n&&d){        bool flag=false;        for(int i=0;i<n;i++){            scanf("%lf%lf",&x[i],&y[i]);            if(abs(y[i])>d) flag=true;        }        if(flag||d<0){            printf("Case %d: %d\n",++t,-1);            continue;        }        for(int i=0;i<n;i++){            a[i].l=x[i]-sqrt(d*d-y[i]*y[i]);            a[i].r=x[i]+sqrt(d*d-y[i]*y[i]);        }        sort(a,a+n,cmp);        int ans=1,temp=0;        for(int i=1;i<n;i++){            if(a[i].l>a[temp].r){                ans++;                temp=i;            }            else if(a[i].r<a[temp].r) temp=i;        }        printf("Case %d: %d\n",++t,ans);    }}
0 0
原创粉丝点击