[NOIP模拟赛]棋子游戏
题目描述
Daisy和Stella玩一个游戏。
游戏在一个无限长的一维坐标轴上,每个玩家有一枚棋子。一开始Daisy的棋子在x=0的位置,Stella的棋子在x=d的位置。
每个棋子有两个属性:最大移动距离,攻击范围。Daisy的棋子的最大移动距离是mov1,攻击范围是rng1;Stella的棋子的最大移动距离是mov1,攻击范围是rng1。
两人轮流操作,Daisy先走。每轮当前玩家移动己方棋子,但移动距离不可超过该棋子的最大移动距离(移动距离必须是整数,可以不动)。然后,当前玩家检查对方棋子是否在己方棋子攻击范围内,如果是,当前选手获胜,否则游戏继续。
已知正整数mov1,rng1,mov2,rng2,d。求出双方都使用最优策略下谁能获胜,或者平局。
输入格式
多组数据,首先是一个整数T(5≤T≤20)表示有T组测试数据,每组测试数据为:
第一行:5个整数,分别表示mov1,rng1,mov2,rng2,d。(1≤mov1,rng1,mov2,rng2,d≤10^9)
输出格式
共T行,每行一个字符串,如果Daisy胜,输出"Daisy",如果Stella胜,输出"Stella",平局输出"Draw"。
输入样例
17 19 21 31 41
输出样例
Draw
题解:
①首先判断Daisy能否在第一轮击败Stella。
②mov1+rng1==mov2+rng2的时候一定是平局;
先明确一个结论:Daisy能击败Stella的必要条件是mov1+rng1>mov2+rng2(Stella击败Daisy同理);
证明:假设mov1+rng1≤mov2+rng2且Daisy赢了(非第一轮),说明Daisy最后一次移动之前与Stella的距离dis≤mov1+rng1;
再考虑Stella最后一次移动之前与Daisy的距离dis‘:
若dis’>dis,那么Stella不可能蠢到缩短距离去让Daisy打,因为这样会直接输掉比赛;
若dis’<dis,那么Stella在这时就已经能干掉Daisy了,不可能蠢到增长距离,还只增长到让Daisy刚好能打到自己。
所以mov1+rng1==mov2+rng2的时候一定是平局,因为双方都无法靠近对方。
③若mov1+rng1>mov2+rng2,这时只要判断答案是Daisy胜还是平局。
因为Daisy第一轮无法击败Stella,Stella也不可能击败Daisy,所以Stella会跑,Daisy会追,所以Daisy胜利的其中一个条件是mov1>mov2。
但Daisy在追的时候还要防止Stella突然回头攻击,因此要保持与Stella的距离dis>mov2+rng2,所以条件二是mov1+rng1≥1+rng2+mov2+mov2。
④mov1+rng1<mov2+rng2,情况类似,但要先判断Stella能否在第二轮击败Daisy,不行再套用③的判断方式。
#include<cstdio> int T, mov1, mov2, rng1, rng2, d; int main() {for( scanf( "%d", &T ); T; T-- ) { scanf( "%d%d", &mov1, &mov2 ); scanf( "%d%d%d", &rng1, &rng2, &d ); if( mov1+rng1>=d ) printf( "Daisy\n" ); else if( mov1+rng1==mov2+rng2 ) printf( "Draw\n" ); else if( mov1+rng1>mov2+rng2 ) { if( mov1>mov2 && mov1+rng1>=1+rng2+mov2+mov2 ) printf( "Daisy\n" ); else printf( "Draw\n" ); } else if( mov1+rng1<mov2+rng2 ) { if( mov1+d<=mov2+rng2 ) printf( "Stella\n" ); else if( mov2>mov1 && mov2+rng2>=1+rng1+mov1+mov1 ) printf( "Stella\n" ); else printf( "Draw\n" ); } } return 0; }
[NOIP模拟赛]棋子游戏相关推荐
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- 【noip模拟赛4】Matrix67的派对 暴力dfs
[noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- jyzy noip模拟赛5.22-2
不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...
- NOIP模拟赛csy2021/10/30
NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...
- 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告
[WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...
- NOIP 模拟赛 长寿花 题解
NOIP 模拟赛 长寿花 题解 要放 \(n\) 层物品,第 \(i\) 层有 \(a_i\) 个位置放物品,物品有 \(m\) 中颜色,有约束条件: 同一层两个相邻物品颜色不能相同. 相邻两层颜色集 ...
- 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)
[题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...
- 【NOIP 模拟赛】平均数 涂色游戏 序列题解
吐槽(完跪):神tmNOIP模拟赛,看到大题头根本高级数据结构什么的想都没想,结果死的很惨,第三题竟然要可持久化线段树,这NOIP我服了. 平均数: 这道题40分相信大家都能拿到,剩下的60分讲真考验 ...
最新文章
- 时间复杂度为on的排序算法_排序算法amp;时间复杂度计算
- ant如何形成时间轴和图库_高中历史时间轴来了(电子高清版),最新最完整的复习时间线整理,这里都有!...
- telnet命令详解
- Token的解密和加密
- java数据库edit_Java数据库连接——JDBC基础知识(操作数据库:增删改查)
- Android工具里没有Android,android – AppCompat工具栏没有显示
- jmeter压力测试(Linux与Windows)
- POJ 1002 电话号码字符串处理
- 课题申报书范文_高等学校教改课题申报书范文
- wps两个表格对比数据(怎样对两个EXCEL表格数据对比,找出相同和不同的数据?)
- 用大白话讲解Carplay(原创)
- python 实现大鱼吃小鱼小游戏(课程作业)
- win10下载文件夹变成英文了该怎么办?下载文件夹变成英文的修复方法
- 计算机专业报瑞士酒店管理,我适合去瑞士读酒店管理吗?
- 单例模式与反射的攻防之【 道高一尺,魔高一丈 】
- VBA打印机设置(列出所有打印机名字、选用合适的打印机并设计端口号)
- 将KITTI数据集的odometry部分velodyne的bin文件转换成rosbag
- Android MagicIndicator 指示器 导航
- go 源码工具解析-英文单复数变化 Inflection
- fMRI处理:基于spm的dparsf