ACM/ICPC 之 模拟 (HNUOJ 13391-换瓶模拟)

  题意:汽水瓶有三个部分cap+plastic bottle+ label(瓶盖-瓶身-瓶底),给出数据:n为原瓶数,x,y,z为这三个部分可以用相应的数字换取新瓶子,求最大总瓶数。

  模拟(暴力)

  

 1 //汽水瓶有三个部分-cap+plastic bottle+ label
 2 //n为原瓶数
 3 //x,y,z为这三个部分可以用相应的数字换取新瓶子,求最大总瓶数
 4 #include<iostream>
 5 #include<cstring>
 6 #include<cstdio>
 7 #include<algorithm>
 8 using namespace std;
 9 
10 int t[3];    //当前三部分数量(按换瓶基数-调整顺序)
11 int c[3];    //三部分换瓶基数
12 
13 int main()
14 {
15     int T,n;
16     scanf("%d",&T);
17 
18     while(T--)
19     {
20         int b = 0;
21         scanf("%d%d%d%d",&n,&c[0],&c[1],&c[2]);
22         b = t[0] = t[1] = t[2] = n;
23 
24         sort(c,c+3);    //排序(偷懒啦= =)
25 
26         int res;    //可换瓶数量
27         while(t[0]/c[0] || t[1]/c[1] || t[2]/c[2])
28         {
29             if(t[0]/c[0])
30             {
31                 b += res = t[0]/c[0];
32                 t[0] = t[0]%c[0]+res;
33                 t[1] += res;
34                 t[2] += res;
35             }
36             if(t[1]/c[1])
37             {
38                 b += res = t[1]/c[1];
39                 t[1] = t[1]%c[1]+res;
40                 t[2] += res;
41                 t[0] += res;                
42             }
43             if(t[2]/c[2])
44             {
45                 b += res = t[2]/c[2];
46                 t[2] = t[2]%c[2]+res;
47                 t[1] += res;
48                 t[0] += res;
49             }
50         }
51         printf("%d
",b);
52     }
53 
54     return 0;
55 }
他坐在湖边,望向天空,她坐在对岸,盯着湖面
原文地址:https://www.cnblogs.com/Inkblots/p/4729482.html