雷达安装

来源:互联网 发布:p2p 网络 控制软件 编辑:程序博客网 时间:2024/04/26 09:36

QAQ
将问题稍微进行转化:将基站设为覆盖半径为 D。
则问题变为:每个基站的覆盖区域必须要有雷达
又因为雷达只能放在 X 轴上,所以每个基站覆盖的其实是一条线
段。
则问题变为:每条线段上必须要要有雷达
先把线段按照右端点排序;
对于最早的没有雷达的线段,把一个雷达放在它的右端点。
更新后面的雷达多少被覆盖到

#include <cstdio>#include <iostream>#include <cmath>#include <algorithm>using namespace std;bool vis[99999];struct node{    double l,r;}a[99999];int comp(node x,node y){    return x.r<y.r;}int main(){    int n,d;    scanf("%d%d",&n,&d);    for(int i=1;i<=n;i++)    {        int x,y;        scanf("%d%d",&x,&y);        if(y>d)         {            printf("-1\n");            return 0;        }        double xx=sqrt((d*d)-(y*y));        a[i].l=(double) x-xx;        a[i].r=(double) x+xx;    }    sort(a+1,a+n+1,comp);    int ans=0;     for(int i=1;i<=n;i++)    if(!vis[i])    {        for(int j=i+1;j<=n;j++)        if(a[i].r>=a[j].l) vis[j]=1;        vis[i]=1;        ans++;        //printf("%lf %lf\n",a[i].l,a[i].r);    }    printf("%d",ans);    return 0;}
原创粉丝点击