POJ1328-雷达装置

//题目来源:http://poj.org/problem?id=1328

  

  解题思路:

    先讲岛屿按照X坐标,按照升序排列。

    计算以岛屿为中心,雷达的有效检测范围为半径,计算出与X轴的交点。

    当左边的岛屿,与X轴的交点(靠右的那个交点)>它右边那个岛屿与X轴的交点(靠左边那个),那么雷达装置就可以省一个。

    以此类推,就可以计算出所需的雷达数量。  

//POJ1328
//Radar
//http://poj.org/problem?id=1328
#include<stdio.h>
#include<math.h>
#define SIZE 100

double arr[SIZE][2];

typedef struct intersection{
    double LP;
    double RP;
}Inter;

Inter data[SIZE];

//将岛屿按照坐标X排序(升序
void Change(int num){
    int r1,r2;
    double tempx,tempy;
    for(r1=0;r1<num;r1++){
        for(r2=r1+1;r2<num;r2++){
            if(arr[r1][0]>arr[r2][0]){
                tempx=arr[r1][0];
                arr[r1][0]=arr[r2][0];
                arr[r2][0]=tempx;

                tempy=arr[r1][1];
                arr[r1][1]=arr[r2][1];
                arr[r2][1]=tempy;
            }
        }
    }
}

//计算以(x,y)为圆心,雷达距离为半径所画的圆,与X轴的交点
void Cal(double x, double y, int radar, int p){
    double temp=sqrt(pow(radar*1.0,2.0)-pow(y,2.0));
    data[p].LP=x-temp;
    data[p].RP=x+temp;
}

//num是岛屿数,radar是雷达的覆盖范围
int Check(int num, int radar){
    int RadarCount=0,
        r1=0;

    for(r1=0;r1<num;r1++){
        Cal(arr[r1][0],arr[r1][1],radar,r1);
    }

    int r2;
    for(r1=0;r1<num;){
        RadarCount++;
        //printf("%d\n",temp);
        for(r2=r1+1;r2<num;r2++){
            //printf("r1:%d,r2:%d\n",r1,r2);
            if(data[r1].RP>data[r2].LP);
            else break;
        }
        r1=r2;
    }

    /*
    检查计算岛屿与X轴交点的坐标是否正确
    for(r1=0;r1<num;r1++)
        printf("%d:Left:%.3f\tRight:%.3f\n",r1,data[r1].LP,data[r1].RP);
    */

    return RadarCount;
}

int main(void){
    //n是岛屿数,d是雷达的覆盖距离
    int n,d,r1,r2;
    int result[SIZE],resultcount=0,nothing=0;

    while(scanf("%d%d",&n,&d)==2 && n!=0 && d!=0){
        nothing=0;
        for(r1=0;r1<n;r1++){
            scanf("%lf%lf", &arr[r1][0], &arr[r1][1]);
            if(arr[r1][1]>d){
                result[resultcount]=-1;
                nothing=-1;
            }
        }
        //puts("Get!");
        if(nothing!=0) continue;

        //for(r1=0;r1<n;r1++) printf("%d %d\n",arr[r1][0],arr[r1][1]);
        //将岛屿按找X坐标排序
        Change(n);
        //for(r1=0;r1<n;r1++) printf("%d %d\n",arr[r1][0],arr[r1][1]);
        result[resultcount]=Check(n,d);
        resultcount++;
    }

    for(r1=0;r1<resultcount;r1++) printf("case%d:%d\n",r1+1,result[r1]);

    return 0;
}

POJ1328-AC

时间: 2024-08-26 23:28:20

POJ1328-雷达装置的相关文章

雷达装置 (POJ 1328)题解

[问题描述] 建立一个直角坐标系,x轴下方为陆地,上方为海洋,在海洋中有n个岛屿,我们需要在x轴上建立若干个雷达装置,每个雷达装置的监测半径为h,问最少需要多少雷达?(输入中将有多组数据,每组数据间有一行空着,最后用一行0 0表示输入结束,你的任务是对于每组数据,求出最少需要的雷达数,若有岛屿无法被监测到,输出-1) [样例输入] 3 2 1 2 -3 1 2 1 1 2 0 2 0 0 [样例输出] Case 1: 2 Case 2: 1 [解题思路] 这题为贪心题,看到题目,不难想到,如果在

poj1328雷达设置 贪心

Radar Installation Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only

【贪心】poj1328:雷达设置

Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only cover d distance, s

谷歌负责人谈无人驾驶汽车背后那些事

克里斯·厄姆森 谷歌今天在 Code 大会上发布了新的无人驾驶汽车.该汽车看起来像是有轮子的缆车,它既没有驾驶盘,也没有刹车踏板和加速装置.Re/code 采访了谷歌无人驾驶汽车项目主管克里斯·厄姆森(Chris Urmson),期间谈及该项目革命背后的概念.产品何时上路等问题. 谷歌在过去的 5 年里改装了现成车型去试验无人驾驶技术.除了车顶的旋转激光装置外,它们看上去跟普通车没什么不同.而该公司今天发布的汽车看上去则非常怪异.它们又小又圆,配备各种小型黑色传感器(车顶也有旋转激光装置),用泡

POJ 1328 Radar Installation(贪心)

http://poj.org/problem?id=1328 题意: 假设滑行是无限直线.土地在海岸的一边,海在另一边.每个小岛是位于海边的一个点.位于海岸上的任何雷达装置只能覆盖距离,所以如果两者之间的距离最大为d,则海中的岛屿可以被半径装置覆盖. 我们使用笛卡尔坐标系,定义惯性是x轴.海侧在x轴之上,陆侧在下.考虑到每个岛屿在海洋中的位置,并且考虑到雷达装置的覆盖距离,您的任务是编写一个程序,以找到覆盖所有岛屿的最少数量的雷达装置.注意,岛的位置由其xy坐标表示. 思路: 由于雷达只能处于x

uva 10237 - Bishops(dp)

克里斯·厄姆森 谷歌今天在 Code 大会上发布了新的无人驾驶汽车.该汽车看起来像是有轮子的缆车,它既没有驾驶盘,也没有刹车踏板和加速装置.Re/code 采访了谷歌无人驾驶汽车项目主管克里斯·厄姆森(Chris Urmson),期间谈及该项目革命背后的概念.产品何时上路等问题. 谷歌在过去的 5 年里改装了现成车型去试验无人驾驶技术.除了车顶的旋转激光装置外,它们看上去跟普通车没什么不同.而该公司今天发布的汽车看上去则非常怪异.它们又小又圆,配备各种小型黑色传感器(车顶也有旋转激光装置),用泡

干货贴:关于互联网产品外观专利创新方法的那些事

应美国情报高级研究计划局(IARPA)的要求,哈佛大学肯尼迪政治学院贝尔弗科学与国际事务中心与2017年7月发布<人工智能与国家安全>报告,分析人工智能(AI)对美国家安全的巨大影响,为美政府AI政策提供建议.本报告分为以下几个部分,我们将在接下来几天内,摘选报告部分主主体内容与大家共同分享学习. 第一部分:人工智能的变革潜力 第二部分:学习以前的变革性技术案例 第三部分:关于人工智能和国家安全的建议 结论 [深度]哈佛大学:人工智能和国家安全(八)AI与国家安全的11点建议与结论 附录:变革

一些贪心题的题解

众所周知,贪心是一个比较恶心的算法. 区别于常规的算法或数据结构,贪心题一般不会让人看到就想到思路,而是需要我们在一些猜测或是感性分析下,找到一种局部最优的方案,并且可以通过局部最优解推出全局最优解. T1:防晒 有C头奶牛进行日光浴,第i头奶牛需要minSPF[i]到maxSPF[i]单位强度之间的阳光. 每头奶牛在日光浴前必须涂防晒霜,防晒霜有L种,涂上第i种之后,身体接收到的阳光强度就会稳定为SPF[i],第i种防晒霜有cover[i]瓶. 求最多可以满足多少头奶牛进行日光浴. 输入格式

Poj1328 用雷达覆盖所有的岛屿

(此配图来自http://blog.csdn.net/zhengnanlee/article/details/9613161) 图中ABCD为海岛的位置.题目中会给出几个海岛的坐标位置,雷达覆盖半径d,问你用几个雷达可实现海岛的全部覆盖,不能就输出-1. 观察图可知:(ABCD已经按照左交点数的大小好位置) A的右交点>B的左交点,所以AB可共用一个雷达: B的右交点>C的左交点,所以BC可共用一个雷达: C的右交点<D的左交点,所以CD不可共用一个雷达: 所以一共用2个雷达即可实现岛屿