牛客题解 | 回合制游戏
题目
题解:
题目难度:二星
考察点: 思维,数学
易错点:
C++中的除法是向下去整,也就是说当\(a\)和\(b\)均为整数时,\(\frac a b\)只取整数部分,因此当全由\(normalAttack\)构成时,其结果应该为\(\frac {hp+normalAttack-1}{normalAttack}\),否则不能整除时就会少计算一个
解法:数学
当使用\(buffedAttack\)时,需要一个回合来蓄力,一个回合来攻击,需要两个回合。因此,当\(2\)倍的\(normalAttack\)都无法超过\(buffedAttack\)时,才使用\(buffedAttack\),否则使用\(normalAttack\)一定是更优的。如果全使用\(normalAttack\),则需要的次数为\(\frac {hp+normalAttack-1}{normalAttack}\)。如果全使用\(buffedAttack\),则需要的次数\(\frac {hp}{buffedAttack \times 2}\)。同时对于余数部分,分为3种情况,一种是直接整除,一种是一个\(normalAttack\)可以完成,一种是需要\(buffedAttack\)才能完成。
#include "bits/stdc++.h"
using namespace std;
typedef long long LL;
LL hp,normalAttack,buffedAttack;
int main()
{
scanf("%lld%lld%lld",&hp,&normalAttack,&buffedAttack);
if(normalAttack*2>=buffedAttack){
printf("%lld\n",(hp+normalAttack-1)/normalAttack);
}else{
LL tmp=hp/buffedAttack*2;
LL mod=hp%buffedAttack;
if(mod<=normalAttack){
if(mod) tmp++;
}else tmp+=2;
printf("%lld\n",tmp);
}
return 0;
}

浙公网安备 33010602011771号