Radar Installation

来源:互联网 发布:js 自定义日期选择器 编辑:程序博客网 时间:2024/04/29 22:07

这个题看起来很吓人,实际上呢,确实很吓人,他的意思是说给你小岛的坐标和岸边上雷达的扫描半径,给你几个小岛,让你求出最少需要多少雷达,如果不可能实现雷达的扫描范围覆盖小岛就输出“-1”,你可以想象一下,当小岛离海岸挺远,雷达半径很近的时候这是不可能的,剩下的就是如何让雷达的数目最小了,别人说是个贪心。。我觉得就是个纯数学问题,你画画图就可以了

#include <iostream>#include <cstring>#include <cmath>#include <cstdio>using namespace std;double x[10000],y[10000],ll[11000],rr[10000];int main(){    int n,d;    int count=1;    while(cin>>n>>d)    {        if(n==0&&d==0)            break;        int flog=1,sum=1;        for(int i=0;i<n;i++)        {            cin>>x[i]>>y[i];            if(y[i]>d)                flog=0;        }        cout<<"Case "<<count;        count++;        if(flog==0||d==0)        {            cout<<": -1"<<endl;            continue;        }        int t;        for(int i=0;i<n-1;i++)        {            for(int j=0;j<n-i-1;j++)            {                if(x[j]>x[j+1])                {                    t=x[j];                    x[j]=x[j+1];                    x[j+1]=t;                    t=y[j];                    y[j]=y[j+1];                    y[j+1]=t;                }            }        }        for (int i=0;i<n;i++)        {            double s=sqrt(d*d-y[i]*y[i]);            ll[i]=x[i]-s;            rr[i]=x[i]+s;        }        double x=rr[0];        for(int i=1;i<n;i++)        {            if(ll[i]>x)            {                x=rr[i];                sum++;            }            if(rr[i]<x)            {                x=rr[i];            }        }        cout<<": "<<sum<<endl;;    }    return 0;}


0 0
原创粉丝点击