一条龙的血量是 x x x,技能 1 1 1 是使得 x = [ x 2 ] + 10 x=[\dfrac{x}{2}]+10 x=[2x]+10,能使用 n n n 次;技能 2 2 2 使得 x = x − 10 x=x-10 x=x−10,能使用 m m m 次。给定 x , n , m x,n,m x,n,m,求出能不能使得 x ≤ 0 x\le 0 x≤0。
我们经过观察,发现大部分情况下使用技能 1 1 1 的效果更好,但是如果 x x x 和 [ n 2 ] [\dfrac{n}{2}] [2n] 相差不超过 10 10 10 时就会起到负作用。
所以我们可以首先使用技能 1 1 1 ,直到产生负作用或者使用完毕为止;然后使用技能 2 2 2 。在这期间判断龙有没有被杀死就行了。
#include
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int flag=0;
int x,n,m;
scanf("%d%d%d",&x,&n,&m);
while(n--)
{
if(x-x/2<=10)break;
x=x/2+10;
if(x<=0)
{
printf("YES\n");
flag=1;
break;
}
}
while(m--)
{
x=x-10;
if(x<=0)
{
printf("YES\n");
flag=1;
break;
}
}
if(flag==0)
{
printf("NO\n");
}
}
return 0;
}