题解 P6462 【补刀】
Suuon_Kanderu · · 题解
每次询问正解应该是
思路: 先特判掉几种情况:
- 英雄攻击力已经比小兵血多了,刚开始一刀斩,YES。
- 防御塔攻击比小兵血多,刚上来一击就把小兵秒了NO(因为特判掉第一种情况之后英雄一刀肯定杀不死小兵)
- 英雄攻击力为0,无论如何也杀不死嘛NO。
- 如果防御塔攻击力为0,肯定是能干死的 YES。(特判掉第三种情况后英雄攻击力肯定大于0)
接着,我们开始用一点小学奥数。
- 我们先让防御塔打几刀,一直等到防御塔再打一下小兵就挂了的地步。(这里我们用小兵的血
\mod{} 防御塔攻击力,注意如果正好整除了,我们就让防御塔少打一下,小兵剩下的血就是X ,不然小兵已经死了你就……) - 我们还要处理一下防御塔攻击的次数,因为防御塔能打几下,英雄就能打几下。如果英雄能够造成的总伤害比小兵剩余的血要高,那就是 YES,反之就是 NO。(这里注意英雄能攻击的次数应该比防御塔攻击次数多1次)
#include<bits/stdc++.h>
using namespace std;
#define NO {printf("No\n");continue;}
#define YES {printf("Yes\n");continue; }
int main() {
long long h,x,y,t;//如题目
cin >> t;
while(t--) {
scanf("%ld%ld%ld",&h,&x,&y);
if(y >= h)YES//1.
if(x >= h)NO//2.
if(y == 0)NO/3.
if(x == 0)YES//4.
long long ti = h/x + 1;//英雄能攻击的次数
h = h % x;//剩余血
if(h == 0)h = x;//如果打没血了,就少打一次
if((ti) * y >= h)YES//英雄能造成总伤害比剩余血多,就能打死
else NO
}
}