让我回想起了小学的时候,空瓶换饮料还能向别人借一个空瓶喝了再还回去的神奇问题……
开始时思考,特判一下a=1或者b=1的情况为INF就可以了,然后发现2 2 1 2这样的样例也是能够喝到无穷多瓶饮料的。
所以干脆直接做循环,每次循环模拟换了饮料然后喝掉的情形,如果发现喝完空瓶子不减少或者瓶盖子不减少,那显然是能喝不知道多少瓶饮料了,就直接输出INF。
1 #include<cstdio> 2 int x,y,a,b,cnt; 3 bool flag; 4 int main() 5 { 6 int t; 7 scanf("%d",&t); 8 while(t--) 9 { 10 scanf("%d%d%d%d",&x,&y,&a,&b);//x空瓶 or y瓶盖换满瓶 ; 现有a空瓶,b瓶盖 11 cnt=0; 12 flag=1; 13 while(a>=x || b>=y) 14 { 15 int now_a=a,now_b=b; 16 if(a>=x) 17 { 18 int c=a/x; 19 a=a%x+c; 20 b+=c; 21 cnt+=c; 22 } 23 if(b>=y) 24 { 25 int c=b/y; 26 b=b%y+c; 27 a+=c; 28 cnt+=c; 29 } 30 if(a>=now_a && b>=now_b) 31 { 32 printf("INF "); 33 flag=0; 34 break; 35 } 36 } 37 if(flag) printf("%d ",cnt); 38 } 39 }