ZOJ 3948 - Marjar Cola

让我回想起了小学的时候,空瓶换饮料还能向别人借一个空瓶喝了再还回去的神奇问题……

开始时思考,特判一下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\n");
33                 flag=0;
34                 break;
35             }
36         }
37         if(flag) printf("%d\n",cnt);
38     }
39 }

 

posted @ 2017-05-10 19:45  Dilthey  阅读(331)  评论(0编辑  收藏  举报