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 ...
随机推荐
- 盘点Excel中的那些有趣的“bug”
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. Excel 1.0早在1985年正式进入市场,距今已经有36年了,虽然在推出 ...
- C#扩展方法的一分钟小例子
扩展方法是静态方法,是类的一部分,但没有在类的源代码中,就像一个补丁 首先创建一个静态类,然后创建一个静态方法,重点是静态方法的参数 public static class xExtension { ...
- myeclipse js报错
Myeclipse 版本10.1 加载的js报错,解决方法: window -> preferences -> myeclipse -> validation,在右边下拉框找到 Ja ...
- [unknown source] 快乐树
一.题目 题目描述 有一棵 \(n\) 个节点的数,每个点有点权 \(a_i\),定义一条路径的权值为路径上所有点的异或和,求所有路径的权值和,有 \(q\) 次修改,每次改一个点的点权. 数据范围 ...
- 给Winform中的TabControl添加更现代的拖拽功能
上周接到一个开发任务,大致是允许APP中的Tab拖动以成为一个独立Tab,脱离之前的TabControl,就是现在Web拖动标签页创建新窗口的功能,现在浏览器必备的功能,应该很简单,然而我司采用的Do ...
- codefoces D. Phoenix and Science
原题链接:https://codeforc.es/problemset/problem/1348/D 题意:给你一个体重为一克的细菌(它可以每天进行一次二分裂即一分为二体重均分:晚上体重增加1克)求最 ...
- DevOps教程:DevOps 面试题
[注]本文译自:https://www.javatpoint.com/devops-interview-questions
- 【面试技巧】老生常谈之 n 种使用 CSS 实现三角形的技巧
在一些面经中,经常能看到有关 CSS 的题目都会有一道如何使用 CSS 绘制三角形,而常见的回答通常也只有使用 border 进行绘制一种方法. 而 CSS 发展到今天,其实有很多有意思的仅仅使用 C ...
- 201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)详细阅读<构建之法>学习并掌握PSP的具体流程(2)掌握背包问题,通过查阅相关资料,设计一个采用 ...
- Java(171-194)【接口、多态】
1.接口概述与生活举例 接口就是一种公共的规范标准 只要符合规范标准,就可以大家通用 2.接口的定义基本格式 public interface 接口名称 { // 抽象方法 / ...