[CF Contest] Kana and Dragon Quest game 题解
对于这道题,我们可以简化为:
kana要打败恶龙,恶龙有h点血。
Kana有两种法术:
- V法术——使龙的血量变成\([\frac{h}{2}]+10\)([ ]代表向上取整)。
- L法术——使龙的血量变成\(h-10\)。
给你龙的血量和使用V法术和L法术的最大次数,问可爱的kana能否杀死恶龙。
战略:
使用尽可能多的V法术,但是不至于让恶龙回血。比如这个:
恶龙10点血。代入\([\frac{h}{2}]+10\)中得龙的血量变成15.
这是绝对不行的。
最后使用完L法术,看能不能把龙打死,如果能,输出“YES”;如果不能,输出“NO”。
AC代码:
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int h,v,l;
cin>>h>>v>>l;
while((((h/2)+10)<=h)&&(v!=0)){ //使用尽可能多的V法术,但是不至于让恶龙回血。其中((h/2)+10)<=h是来判断是否会给恶龙回血的。
h/=2;
h+=10;
v--; //使用V法术
}if((l*10)>=h){ //最后使用完L法术,看能不能把龙打死
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
}