POJ 1328 Radar Installation

来源:互联网 发布:arm编程论文 编辑:程序博客网 时间:2024/06/05 18:12

原题链接

思路:贪心。第一个卫星的位置在s1和e1之间,若s2<=e1则不需要新卫星,第一个卫星位置更新为s2和e2之间;若s2>e1则需要新卫星,第二个卫星位置在s2和e2之间。以此类推。

AC代码:

#include <iostream>#include <cstdio> #include <algorithm>#include <cstdlib>#include <cstring>#include <cmath>using namespace std;typedef pair<double,double> PII;int n,i,ans;double x,y,d,flag;PII radar[1005];bool cmp(PII a,PII b){    return a.first<b.first;}int main(){    int k=0;    while(scanf("%d %lf",&n,&d) && !(n==0 && d==0)){        k++;        ans=1;        flag=0;        for(i=0;i<n;i++){            scanf("%lf %lf",&x,&y);            if(d<0 || y>d){                flag=1;            }            radar[i].first=x-sqrt(d*d-y*y);            radar[i].second=x+sqrt(d*d-y*y);        }        if(flag){            printf("Case %d: -1\n",k);            continue;        }        sort(radar,radar+n,cmp);        flag=radar[0].second;        for(i=1;i<n;i++){            PII p=radar[i];            if(flag<p.first){                flag=p.second;                ans++;            }            else if(flag>p.second)  flag=p.second;        }        printf("Case %d: %d\n",k,ans);    }    return 0;}
1 0
原创粉丝点击