方法一:
时间复杂度n
#include <stdio.h>
int main(){
int h,a,b,k,die,c=0;
while(scanf("%d %d %d %d",&h,&a,&b,&k)!=EOF){
die=0;
if(h-a<0) //Smash!!!一击暴命!!
die=1;
else{
if(h+b*(k-1)-a*k<1) //前k个回合已死(黑龙回血比黑龙攻击少一次)
die=1;
else if(a*k-b*(k+1)>0) //前k+1个回合,黑龙在扣血
die=1;
else
die=0;
}
if(die)
printf("Case #%d: White win\n",++c);
else
printf("Case #%d: Unknow\n",++c);
}
return 0;
}
方法二:
时间复杂度n2
#include <stdio.h>
int main(){
int h,a,b,k,die,c=0,t;
while(scanf("%d %d %d %d",&h,&a,&b,&k)!=EOF){
die=0;
t=h;
for(int i=1;i<=k;i++){
h-=a;
if(h<1){
die=1;
break;
}
h+=b;
}
h+=b; //k回合后黑龙休息,白龙休息
if(die||h<t) //黑龙已死或者黑龙在k+1回合内扣血
printf("Case #%d: White win\n",++c);
else
printf("Case #%d: Unknow\n",++c);
}
return 0;
}