POJ1328贪心放雷达
题意:
有一个二维坐标,y>0是海,y<=0是陆地,然后只能在y=0的岸边上放雷达,有n个城市需要被监控,问最少放多少个雷达。
思路:
贪心去做就行了,其实题目不难但是这个题目过的并不怎么顺利,哎!,一开始我的想法是按照x排序,然后从左往右一个一个放置雷达,第一个放在第一个点相切的右侧,....结果果断wa了,然后就又想到可以求出每个城市的可放置区间,然后去贪心,还是wa了,原因是排序的时候还是按照x从小到大排序的,后来看了讨论区一眼,才把排序是按照左区间排序的,一开始隐约考虑过这个,但是感觉按照x排没有错(一开始的想法),还有就是这个题目的数据比较坑人,要考虑d是负数或者y是负数的情况,如果全面的想,d是负数的话,如果所有的y都<=0那么输出0,否则就输出-1,如果y有大于0的,同时最大的y比b大,那么就输出-1,然后就是正常贪心,贪心的时候遇到y<0的点直接跳过去不考虑,有点小坑啊,不过是一个不错的简单题。
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 1000 + 10
using namespace std;
typedef struct
{
double l ,r;
int id;
}REG;
REG reg[N];
int mark[N];
bool camp(REG a ,REG b)
{
return a.l < b.l;
}
double minn(double x ,double y)
{
return x < y ? x : y;
}
double maxx(double x ,double y)
{
return x > y ? x : y;
}
int main ()
{
int n ,l ,i ,d ,x ,y ,cas = 1;
while(~scanf("%d %d" ,&n ,&d) && n + d)
{
int jude1 = 0 ,jude2 = 0;
memset(mark ,0 ,sizeof(mark));
for(i = 1 ;i <= n ;i ++)
{
scanf("%d %d" ,&x ,&y);
if(y > 0) jude1 = 1;
if(y > d) jude2 = 1;
reg[i].l = x - sqrt(d * d * 1.0 - y * y * 1.0);
reg[i].r = x + sqrt(d * d * 1.0 - y * y * 1.0);
reg[i].id = i;
if(y <= 0) mark[i] = 1;
}
printf("Case %d: " ,cas ++);
if(!jude1)
{
printf("0\n");
continue;
}
if(jude2)
{
printf("-1\n");
continue;
}
double nowxl ,nowxr;
int ansSum = 0;
sort(reg + 1 ,reg + n + 1 ,camp);
for(i = 1 ;i <= n; ++i)
{
if(mark[reg[i].id]) continue;
if(i == 1 || reg[i].l > nowxr)
{
ansSum ++;
nowxl = reg[i].l;
nowxr = reg[i].r;
}
else
{
nowxl = maxx(nowxl ,reg[i].l);
nowxr = minn(nowxr ,reg[i].r);
}
}
printf("%d\n" ,ansSum);
}
return 0;
}
POJ1328贪心放雷达的更多相关文章
- poj1328贪心 雷达,陆地,岛屿问题
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 60381 Accepted: 13 ...
- poj1328 贪心
http://http://poj.org/problem?id=1328 神TM贪心. 不懂请自行搜博客. AC代码: #include<cstdio> #include<algo ...
- poj1328贪心中的区间问题
题意:给定海岛个数.雷达半径以及各海岛坐标,求能覆盖所有海岛的最小雷达数. 思路:先对每个海岛求一个区间:即能覆盖它的所有雷达的圆心所构成的区间.然后对区间排序,定义一个最右点over,依次延伸ove ...
- POJ1328贪心
题意:如今我们位于沿海地区,需要安装大炮,使得火力可以覆盖整个区域.海岸线可以视为是无限长的直线.陆地位于海岸线的一侧,海洋位于另一侧.海洋里有若干个岛屿,每个小岛可以视为海洋中的一个点.我们需要在海 ...
- poj1328 Radar Installation(贪心 策略要选好)
https://vjudge.net/problem/POJ-1328 贪心策略选错了恐怕就完了吧.. 一开始单纯地把island排序,然后想从左到右不断更新,其实这是错的...因为空中是个圆弧. 后 ...
- POJ 1637 混合图欧拉回路
先来复习一下混合图欧拉回路:给定一张含有单向边和双向边的图,使得每一点的入度出度相同. 首先对于有向边来说,它能贡献的入度出度是确定的,我们不予考虑.对于无向图,它可以通过改变方向来改变两端点的出入度 ...
- Codeforces Round #545 (Div. 1)
本来开头两道题写得挺快的,然后第三题想了一会儿胡出一个scc计算gcd的做法,写了一发凭借信仰交了上去结果一发pp了?然后第四题沙雕了想了很久才会,于是罚时瞬间变多.结果后面两题都没时间看了,赛后感觉 ...
- CF1066D Boxes Packing
传送门 这题为什么要用二分呢?/huaji 首先可以\(O(n)\)预处理出从某个物品\(i\)开始放,只放一个盒子,能放的最后物品的位置\(j\),只要用两个指针维护左右端点,每次移动一下左端点同时 ...
- P2765 魔术球问题
P2765 魔术球问题 贪心模拟就可以过.........好像和dinic没啥关系 找找规律发现可以贪心放.n又灰常小. 设答案=m 你可以$O(mn)$直接模拟过去 闲的慌得话可以像我用个$se ...
随机推荐
- javascript处理HTML的Encode(转码)和解码(Decode)
HTML的Encode(转码)和解码(Decode)在平时的开发中也是经常要处理的,在这里总结了使用javascript处理HTML的Encode(转码)和解码(Decode)的常用方式 一.用浏览器 ...
- 翻译:《实用的Python编程》05_00_Overview
目录 | 上一节 (4 类和对象) | 下一节 (6 生成器) 5. Python 对象的内部工作原理 本节介绍 Python 对象的内部工作原理.来自其它语言的程序员通常会发现 Python 的类概 ...
- 使用代码生成工具快速开发ABP框架项目
在一般系统开发中,我们一般要借助于高度定制化的代码生成工具,用于统一代码风,节省开发时间,提高开发效率.不同的项目,它的项目不同分层的基类定义不同,我们需要在框架基类的基础上扩展我们的业务类代码,尽量 ...
- javascript中的Strict模式
目录 简介 使用Strict mode strict mode的新特性 强制抛出异常 简化变量的使用 简化arguments 让javascript变得更加安全 保留关键字和function的位置 总 ...
- 开灯问题3_2(JAVA语言)
package 第三章; public class 开灯问题3_2 { public static void main(String[] args) { // TODO Auto-generated ...
- winnt.h
winnt.h https://docs.microsoft.com/en-us/windows/win32/api/winnt/ /*++ BUILD Version: 0091 Increment ...
- nodeJS详解2
Nodejs应用场景 创建应用服务 web开发 接口开发 客户端应用工具 gulp webpack vue脚手架 react脚手架 小程序 NodeJs基于 Commonjs模块化开发的规范,它定义 ...
- 13 条高效实用的 JavaScript 单行代码
JavaScript可以实现很多令人惊奇的事! 从复杂的框架到处理API,有太多的东西可以学习. 甚至,仅用一行代码,它也能完成一些很棒的工作. 不信?那么请看这13条JavaScript单行代码,用 ...
- PureStudy:学科知识分享——个人网站开发全解
PureStudy:学科知识分享--个人网站开发全解 项目描述 PureStudy,学科知识分享网站. 学生可以使用这个网站,来浏览相应学科的知识点.学习总结,获取相关的资料.此外,他们可以选择上传文 ...
- 实际使用Elasticdump工具对Elasticsearch集群进行数据备份和数据还原
文/朱季谦 目录 一.Elasticdump工具介绍 二.Elasticdump工具安装 三.Elasticdump工具使用 最近在开发当中做了一些涉及到Elasticsearch映射结构及数据导出导 ...