YTU 4220: 我自横刀向天笑,去留肝胆两昆仑

题目描述

橙留香曾说过两句话,一句是“我自横刀向天笑,去留肝胆两昆仑”,另一句也是“我自横刀向天笑,去留肝胆两昆仑”。

橙留香又被敌人抓住了,这一次是可恶的 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;
}

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值