补了我一刀

· · 题解

针对这道题目,我们可以想出以下几种特殊情况:

  1. 英雄攻击力大于等于小兵血,秒杀,Yes
  2. 防御塔攻击力大于等于小兵血,秒杀,No(因为排除第一种情况之后英雄不能秒杀)
  3. 英雄攻击力为0,No
  4. 防御塔攻击力为0,Yes(因为特判掉第三种情况之后英雄攻击力肯定不为0)

把这些情况特判之后,不难想出,

我们让防御塔能打几下是几下,把小兵的血磨掉,这时,英雄能够造成的总伤害就是防御塔攻击的次数乘上英雄的伤害,只需要判断,总伤害能不能斩杀小兵就行了。

对了,还要注意一点,如果防御塔刚好把小兵的血打没了,那就让防御塔少打一次,但因为英雄可以在防御塔第一次攻击小兵之前,或者每次防御塔攻击之后对小兵进行一次攻击,所以英雄攻击的次数不变。并且注意一定要先特判英雄攻击力再特判防御塔攻击力,不然会有英雄和防御塔攻击力均为0的情况,也会输出 Yes

好了,说了这么多,贴上我的代码:

#include<bits/stdc++.h>
#define no {printf("No\n");continue;}
#define yes {printf("Yes\n");continue;}//宏定义
using namespace std;
int main(){
    long long n,x,y,h,da;
    cin>>n;
    while(n--){
        cin>>h>>x>>y;
        if(y>=h)
        yes
        if(x>=h)
        no
        if(y==0)
        no
        if(x==0)
        yes
        da=h/x+1;//计算英雄攻击的次数
        h%=x;
        if(h==0)h=x;
        if(da*y>=h)
        yes                            
        else
        no
    }
    return 0;
}

蒟蒻题解第十五弹!