http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28415#problem/A

题目大意:X轴为海岸线可放雷达监测目标点,告诉n个目标点和雷达监测半径,求最少多少个雷达可全覆盖,如果不能输出-1;

解题思路:赤裸裸的区间选点问题(数轴上有n个闭区间,去尽量少的点,使每个区间至少有一个点)。核心思想就是贪心算法:把所有区间按照b从小到大的顺序(b相同时按a从大到小的顺序),贪心策略:第一区间取最后一个点,然后跳过接下来包含该点的区间,直到遇到不包含该点的区间最为选择第二点的区间,以此类推,直至最后一个区间。

//****************************************************************
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct QJ{ //定义一个区间类并重写排序函数
double l,r;
int flag;
};
bool operator<(const QJ& a,const QJ& b){
return (a.r==b.r ? a.l>b.l : a.r<b.r);
}
//****************************************************************
int main(){
double x,y;int n,kase=;
for(double d;cin>>n>>d;kase++){ if(n==&&d==)return ;
QJ qj[];
int ok=; //标记是否有超出雷达监测范围的目标 for(int i=;i<n;i++){ //输入目标点,并转化为X轴上的区间
cin>>x>>y;
if(fabs(y)>d)ok=;
else if(ok){
double ban=sqrt(d*d-y*y);
qj[i].l=x-ban;
qj[i].r=x+ban;
qj[i].flag=;
}
} if(ok==)cout<<"Case "<<kase<<": "<<"-1\n";
else{ //如果都在监测范围内,则贪心求解
sort(qj,qj+n);
int sum=;
double point=qj[].r;
for(int j=;j<n;j++){
if(qj[j].l>point){
point=qj[j].r;
sum++;
}
}
cout<<"Case "<<kase<<": "<<sum<<'\n';
}
}
return ;
}
//****************************************************************

[ACM_贪心] Radar Installation的更多相关文章

  1. 贪心 Radar Installation (求最少探测雷达)

    Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...

  2. 贪心 POJ 1328 Radar Installation

    题目地址:http://poj.org/problem?id=1328 /* 贪心 (转载)题意:有一条海岸线,在海岸线上方是大海,海中有一些岛屿, 这些岛的位置已知,海岸线上有雷达,雷达的覆盖半径知 ...

  3. poj 1328 Radar Installation(贪心)

    Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...

  4. poj 1328 Radar Installation (简单的贪心)

    Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42925   Accepted: 94 ...

  5. POJ--1328 Radar Installation(贪心 排序)

    题目:Radar Installation 对于x轴上方的每个建筑 可以计算出x轴上一段区间可以包含这个点 所以就转化成 有多少个区间可以涵盖这所有的点 排序之后贪心一下就ok 用cin 好像一直t看 ...

  6. POJ 1328 Radar Installation 贪心 A

    POJ 1328 Radar Installation https://vjudge.net/problem/POJ-1328 题目: Assume the coasting is an infini ...

  7. 【贪心】「poj1328」Radar Installation

    建模:二维转一维:贪心 Description Assume the coasting is an infinite straight line. Land is in one side of coa ...

  8. POJ 1328 Radar Installation 【贪心 区间选点】

    解题思路:给出n个岛屿,n个岛屿的坐标分别为(a1,b1),(a2,b2)-----(an,bn),雷达的覆盖半径为r 求所有的岛屿都被覆盖所需要的最少的雷达数目. 首先将岛屿坐标进行处理,因为雷达的 ...

  9. Radar Installation(贪心)

    Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 56826   Accepted: 12 ...

随机推荐

  1. Reveal分析IOS界面,plist文件读取

    Reveal分析IOS界面,需要得到app的 softwareVersionBundleId上传到iphone中 , 而IOS8的iTunesMetadata.plist (设备路径/var/mobi ...

  2. Access to the path '' is denied 解决

    环境:iis6 使用silverlight做的上传控件上传文件到某共享目录. 已将在目录的共享安全和安全中加了 共享用户的 权限. 但通过浏览器访问共享目录文件报错:Access to the pat ...

  3. Keep It Simple Stupid!

    Kelly Johnson提出了KISS原则.他是一个飞机工程师以及航空发明家,同时也是一个管理天才,他一生中主要设计了40多架飞机,获得的荣誉相当之多,总之,很牛. 这个原则是对Johnson带领的 ...

  4. UIAlertController、UIAlertAction 警告框

      NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertAction : NSObject <NSCopying> //创建操作 + (instan ...

  5. BZOJ4350: 括号序列再战猪猪侠

    Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...

  6. python 使用字符串名调用类以及调用类方法名

    在python中,有时调用者仅知道类名和类方法,不负责实际的函数调用,而是将要调用的类名和类方法告诉一个中间函数,由中间函数负责实际调用函数.中间函数需以被告知的字符串调用类和类方法.         ...

  7. while语句

    <?php    $num=10;//被除数   $cs=2;   $str="";   while ($num !=0) {          $ys=$num % $cs ...

  8. 一个简单的Windows下的socket程序

    服务器端代码server.cpp: #include <stdio.h> #include <WinSock2.h> #pragma comment(lib,"ws2 ...

  9. sqlserver和oracle的递归查询

    1.sqlserver递归查询方式 CTE: if OBJECT_ID('tb','N') is not null   drop table tb;     create table tb(id va ...

  10. 【Android UI】Android ListView详解

    在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...