
NYOJ 2357: 插塔憋憋乐 贪心
发布日期:2021-05-09 04:20:26
浏览次数:18
分类:博客文章
本文共 909 字,大约阅读时间需要 3 分钟。
2357: 插塔憋憋乐
时间限制: 1 Sec 内存限制: 128 MB 提交: 82 解决: 18 [][][]题目描述
众所不知,LLM是一位红警3大佬,打的非常厉害,但是曾经也是一位萌新,喜欢在家里放防御塔,然后攒单位。现在是这样的: LLM有一个半径为R的基地,他想放一些防御塔,让任何一个敌方单位在进入自己基地的开始就受到防御塔的攻击,由于LLM希望敌人会顶着防御塔的攻击伤害自己,所以他希望任何一个敌人进入自己基地的时候就立刻受到至少两个防御塔的攻击,现在已知防御塔的防御半径为r,为了简化问题,我们假设: 1.如果一个敌人经过两个防御塔的防御的范围相切的点(如图所示),会受到两个防御塔的攻击,这里受到两个防御塔的伤害 2.不需要保证基地内部受到保护,只要保证敌人在进入基地时受到防御塔攻击即可 请问最少需要几个防御塔
输入
每个测试文件少于1000组测试样例
每组测试样例包含两个整数R,r
1<=R,r<=500
输出
输出仅包含一个数字,代表需要的防御塔数量
样例输入
1 1
样例输出
2
思路:
题目意思理解错了,以为相切才能算受到两者的伤害。但其实只要在范围内就算受到伤害。
假设尽量使攻击范围最大,就是防御塔的直径落在基地的周长上面,可以求出一个防御塔所能够对应的基地的弧度。
贪心是因为,假设不能刚刚好排满防御塔,那就假设2的周长,然后只受到一座防御塔的攻击,再向上取整。
源代码:
#include#include #include using namespace std;double pi = acos(-1.0);int main() { int R,r; while(scanf("%d %d",&R,&r)!=EOF) { if(r>=R) printf("2\n"); else { double C=2*pi*R*2; double L=2*asin(r*1.0/R)*R; int ans=(int)ceil(C/L); printf("%d\n",ans); } } return 0;}
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月04日 09时00分03秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
SMON进程、PMON进程、LGWR/ARCH
2019-03-06
Oracle text组件安装
2019-03-06
RAC环境修改参数生效测试
2019-03-06
Oracle 10g安装报错记录
2019-03-06
ConcurrentHashMap 源码分析
2019-03-06
在不影响程序使用的情况下添加shellcode
2019-03-06
isEmpty和isNull()区别
2019-03-06
刷LeetCode的简易姿势
2019-03-06
test!
2019-03-06
从零开始实现放置游戏(十五)——实现战斗挂机(6)在线打怪练级
2019-03-06
JavaScript 构造树形结构的一种高效算法
2019-03-06
Head First 设计模式 —— 00. 引子
2019-03-06
通过Attached Property给控件绑定Command(二)
2019-03-06
Linq使用心得——SelectMany替代二重foreach循环
2019-03-06
UWP开发入门(二)——RelativePanel
2019-03-06
UWP开发入门(三)——{x:Bind}扩展标记
2019-03-06