C、Guard the empire(贪心)
链接:https://ac.nowcoder.com/acm/contest/3570/C
来源:牛客网
题目描述
Hbb is a general and respected by the entire people of the Empire.
The wizard will launch an attack in the near future in an attempt to
destroy the empire. Hbb had knew the way the Wizards will attack this
time: they will summon N bone dragons on the broad flat ground outside
the wall and let the bone dragons spray a flame (the flame can only be
emitted once). If the wall is sprayed by flames, the wall will be
completely destroyed in an instant. To withstand the wizard’s attack,
Hbb feels very anxious, although he already knew where all the bone
dragons would be summoned. Coincidentally, scientists at the
Capital Laboratory have developed a new type of weapon. The striking
range of the weapon is a circle with the weapon as the center and a
radius of D. In other words, if the weapons are properly placed, the
bone dragons within the strike range will be destroyed. Weapons can
only be placed on the wall, but Hbb is too anxious at this time to
know how to place the weapon, so he tells you the position of the bone
dragon . Since the cost of the weapon is very expensive, Hbb gives you
a requirement: tell him what the minimum number of weapons to use in
order to destroy all bone dragons. If there is no way to destroy all
bone dragons, output -1.输入描述: The input consists of several test cases. The first line of each
case contains two integers and , where is the number of bone dragon
in the ground and is the distance of coverage of the weapon. Then is
followed by lines each containing two integers and , representing
the coordinate of the position of each bone dragon. Then a blank line
follows to separate the cases. The input is terminated by a line
containing pair of zeros 输出描述: For each test case output one line
consisting of the test case number followed by the minimal number of
weapon needed. “-1” installation means no solution for that case. 示例1
输入
3 2
1 2
-3 1
2 1
1 2
0 2
0 0
输出
Case 1: 2
Case 2: 1
备注:

Case1 is explained in the figure, the wall is regarded as the X axis, and the weapon can only be placed on the X axis. The red circle is the weapon strike range.
思路如下
题意:
给出n头骨龙的坐标(只会在第一、第二象限),在X轴上放置武器,每个武器都有相同的固定打击范围D,问最少需要多少武器可以将所有骨龙覆盖,如果不能覆盖所有骨龙则输出-1.
思路:
贪心:要想武器打击范围能够覆盖所有的龙骨,若可以覆盖,则以每头龙为圆心,以D为半径,则必定与x轴有两个焦点,在两个交点所在的区间内就是我们可以放置武器的地方,因此计算出所有骨龙与X轴相交的两个点,按照左端点排序(或者右端点),遍历所有骨龙,判断左右边的武器是否能够覆盖当前遍历到的骨龙的,如果不能覆盖,则添置一个新武器于当前骨龙 与X轴交点的最右端。
题解如下
#include<iostream>
#include<cmath>
#include<algorithm>
#define l first
#define r second
#define Pff pair<double,double> //这里的 pair 用的非常恰到好处,pair的两个值恰好存储区间的两个端点
using namespace std;
const int Len = 1005;
Pff p[Len];
int n; double d;
inline void cal(int &x,int &y,int &i) //计算某个骨龙所对应的武器放置的区间
{
p[i].l = (double)x - sqrt(d * d - y * y);
p[i].r = (double)x + sqrt(d * d - y * y);
}
inline void work()
{
sort(p + 1, p + 1 + n); //对各个武器区间进行排序
int ans = 1;
double pos_r = p[1].r;
for(int i = 2; i <= n; ++i)
{
if(p[i].l > pos_r)
{
++ ans;
pos_r = p[i].r;
}
else if(p[i].r < pos_r) //⚠️这里的一步操作一定要理解
{
pos_r = p[i].r;
}
}
printf("%d\n",ans);
}
int main()
{
int case_ = 1;
while(~scanf("%d %lf", &n, &d) && n + d)
{
printf("Case %d: ",case_ ++);
int flag = 0,x,y;
for(int i = 1;i <= n;++ i)
{
scanf("%d %d",&x,&y);
if(y > d || flag)
{
flag = 1; //在输入的时候不能够break ,否则就输不进去了
continue;
}
cal(x,y,i);
}
if(flag == 0)
work();
else
printf("-1\n");
}
return 0;
}
C、Guard the empire(贪心)的更多相关文章
- bzoj2811[Apio2012]Guard 贪心
2811: [Apio2012]Guard Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 905 Solved: 387[Submit][Statu ...
- bzoj 2811: [Apio2012]Guard【线段树+贪心】
关于没有忍者的区间用线段树判就好啦 然后把剩下的区间改一改:l/r数组表示最左/最右没被删的点,然后删掉修改后的左边大于右边的:l升r降排个序,把包含完整区间的区间删掉: 然后设f/g数组表示i前/后 ...
- 【二分答案+贪心】UVa 1335 - Beijing Guards
Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the Imperial City ...
- 贪心(qwq)习题题解
贪心(qwq)习题题解 SCOI 题解 [ SCOI2016 美味 ] 假设已经确定了前i位,那么答案ans一定属于一个区间. 从高位往低位贪心,每次区间查找是否存在使此位答案为1的值. 比如6位数确 ...
- bzoj2811 [Apio2012]Guard
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2811 [题解] 首先我们先把没看到忍者的段去掉,可以用线段树做. 如果剩下的就是K,那么特判 ...
- LUOGU P3112 [USACO14DEC]后卫马克Guard Mark
题目描述 Farmer John and his herd are playing frisbee. Bessie throws the frisbee down the field, but it' ...
- [差分][二分][贪心]luogu P3634 [APIO2012]守卫
题面 https://www.luogu.com.cn/problem/P3634 给m个限制,可以是一段区间中必须有或者必须无忍者 最多有k个忍者,问有多少个位点一定有忍者 分析 首先用差分标记一下 ...
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- HDOJ 1051. Wooden Sticks 贪心 结构体排序
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
随机推荐
- 本地目录配置多个远程Git仓库
目录 情景一:不同的库分别 pull/push 1. 使用git命令配置 2. 修改.git/config 文件 3. 操作 情景二:不同的库一次push 1. 使用git命令配置 2. 修改.git ...
- Chromium的无锁线程模型C++代码示例
引言 作者:程序员bingo,主要关注客户端架构设计.性能优化.崩溃处理,有多年的Chromium浏览器开发经验. 多线程一直是软件开发中最容易出问题的环节,很多的崩溃.卡死问题都与多线程有关.在常用 ...
- Web架构之Nginx基础配置
目录 1.Nginx 虚拟主机 1.1.基于域名的虚拟主机 1.2.基于端口的虚拟主机 1.3.基于IP的虚拟主机 2.Nginx include 3.Nginx 日志配置 3.1.访问日志 3.2. ...
- Java自学路线图之Java系统自学
Java自学不是一朝一夕的事情.可以采用"懒开始"的方法,但是必须要坚持下去,才能真正自学Java掌握编程技术.那些企图学几天去包装一下找工作的,请绕道.如果你下定决心自学Java ...
- R语言实战(一) R语言介绍
从2018年秋季(大二上学期)开始接触R语言,曾在2019年寒假读过一遍本书的第一版,感觉受益匪浅,之后遇到问题也曾回头来查阅这本书,前几天刚学习过Simulink,趁现在有空再来温习这本书,回顾一下 ...
- drf认证组件(介绍)、权限组件(介绍)、jwt认证、签发、jwt框架使用
目录 一.注册接口 urls.py views.py serializers.py 二.登录接口 三.用户中心接口(权限校验) urls.py views.py serializers.py 四.图书 ...
- 解决 微信包含emoji表情的昵称,直接用sql语句可以写入而在yii2框架写却写不成功的 问题
背景: 首先是emoji表情写入不成功,在网上查了许多资料,包括配置mysql,重启mysql等等,这样之后发现还是写入失败. 将sql语句复制出来,直接粘贴到mysql客户端执行,发现没问题.而通过 ...
- JavaScript每日学习日记(0)
8.10.2019 1.JavaScript能改变HTML内容.属性.样式,能隐藏或显示HTML元素. 2.JavaScript函数可以任意数量被放置在<body>.<head> ...
- 【简说Python WEB】flask-mail电子邮件
目录 flask-mail flask shell发送邮件 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6 ...
- 手把手教大家如何用scrapy爬虫框架爬取王者荣耀官网英雄资料
之前被两个关系很好的朋友拉入了王者荣耀的大坑,奈何技术太差,就想着做一个英雄的随查手册,这样就可以边打边查了.菜归菜,至少得说明咱打王者的态度是没得说的,对吧?大神不喜勿喷!!!感谢!!废话不多说,开 ...