题目描述
橙留香曾说过两句话,一句是“我自横刀向天笑,去留肝胆两昆仑”,另一句也是“我自横刀向天笑,去留肝胆两昆仑”。
橙留香又被敌人抓住了,这一次是可恶的 cyt ,又名西方求败,但是 cyt 很笨,橙留香找机会挣脱了束缚,却很不巧正面碰上了 cyt,于是橙留香边喊着:我自横刀向天笑,去留肝胆两昆仑,边和 cyt 展开了殊死搏斗...
橙留香的血量为 NNN 点,cyt 的血量为 MMM 点,假设橙留香和 cyt 的普通攻击都可以造成 1 点伤害(菜鸡互啄),但是橙留香有两个技能,第一个技能是“我自横刀向天笑”(CD 5 回合),使用后对自己造成 1 点伤害(但不会让自己致死,如果仅剩 1 点,则不会造成),并对 cyt 造成 3 点伤害。第二个技能是“去留肝胆两昆仑”(CD 3 回合),可以立即对 cyt 造成 2 点伤害。互啄开始时橙留香的技能均为可使用状态。假设橙留香先手,橙留香和 cyt 轮流进行回合,橙留香每回合开始时技能冷却时间会减少 1 回合(最多减少至 0)。橙留香的回合内,可以选择使用任何冷却完毕的技能,也可以不使用,使用技能不会消耗当前回合!!!
请问,在橙留香使用技能的抉择最优的情况下,能否打败西方求败 cyt。
输入
第一行一个正整数 TTT,表示一共有 TTT 组情景需要进行处理。(1≤T≤10)(1 \le T \le 10)(1≤T≤10)
对于每一种情景,有一行,两个正整数 N,MN,MN,M。分为代表橙留香和 cyt 的血量。(1≤N,M≤106)(1 \le N,M \le 10^6)(1≤N,M≤106)
输出
输出 TTT 行,对于每一行,如果橙留香干掉了 cyt,输出“Yes”,反之,输出“No”。
输入输出样例
样例输入 #1
复制
3
1 6
2 10
100 230
样例输出 #1
复制
Yes
No
No
提示
喵呜~
对于第一种情景:橙留香先手,使用技能1与技能2,并使用普通攻击,一共造成 6 点伤害,正好击败西方求败。
对于第二种情景:橙留香先手,使用技能1与技能2,并使用普通攻击,一共造成 6 点伤害,西方求败剩余 4 生命。西方求败对橙留香造成 1 点伤害,剩余 1 点。橙留香对西方求败造成 1 点伤害(此时技能1和2均处于冷却状态),剩余 3 生命。西方求败对橙留香造成 1 点伤害,剩余 0 点,橙留香失败。
(CD 是CoolDown,冷却时间的意思)
分析:
本题难点在与分辨在哪一回合两个技能哪个能用,以及理清先后攻击顺序。
对于分辨哪个回合哪个技能能用我们可以用最笨的方法,多写几个找规律:
在第一回合,一二技能都可以用,使用后冷却变成5回合和3回合
第二回合,一技能还剩4回合冷却,二技能还剩2回合冷却
第三回合,一技能还剩3回合冷却,二技能还剩1回合冷却
第四回合,一技能还剩2回合冷却,二技能可以使用,使用后二技能冷却变成3回合
第五回合,一技能还剩1回合冷却,二技能还剩2回合冷却
第六回合,一技能可以使用,使用后冷却剩余5回合,二技能还剩1回合冷却
第七回合,一技能还剩4回合冷却,二技能可以使用,使用后二技能冷却变成3回合
.......
写到这我们不难看出对于一技能,只要满足第 i 回合满足( i - 1 ) % 5 == 0即可使用技能;
对于二技能只要满足第 i 回合满足 ( i - 1 ) % 3 == 0即可。
题目中明确说明每回合橙留香先攻击,所以在实现代码的时候,一定要先让cyt减血,判断完cyt的血量状态后再对橙留香的血量进行处理。
代码:
#include <iostream>
using namespace std;
int n, t, m;
int main()
{
cin >> t;
for (int i = 1; i <= t; i++)
{
int num1;//每回合橙留香可以对对手造成的伤害
cin >> n >> m;//橙留香和cyt的血量
for (int j = 1;; j++)
{
num1 = 1;//每回合橙留香都可以普通攻击一下,所以先把伤害初始化为1
if ((j - 1) % 5 == 0)//找规律,如果该技能不处于冷却状态的话
{
num1 += 3;//伤害再加三
if (n > 1)//如果橙留香的血量大于1,那么减一滴血
n--;
}
if ((j - 1) % 3 == 0)//找规律,如果该技能不处于冷却状态的话
num1 += 2;//伤害再加二
m -= num1;//造成伤害
if (m <= 0)//如果这个时候cyt没血了,那么输出yes就行了
{
cout << "Yes" << endl;
break;
}
n--;//如果cyt还有血的话,他会攻击橙留香就减一滴血
if (n <= 0)//橙留香受到攻击后,如果没血了,输出no
{
cout << "No" << endl;
break;
}
}
}
return 0;
}