文章目录

Question

农业,尤其是生产牛奶,是一个竞争激烈的行业。

Farmer John 发现如果他不在牛奶生产工艺上有所创新,他的乳制品生意可能就会受到重创!

幸运的是,Farmer John 想出了一个好主意。

他的三头获奖的乳牛,Bessie、Elsie Mildred,各自产奶的口味有些许不同,他打算混合这三种牛奶调制出完美的口味。

为了混合这三种不同的牛奶,他拿来三个桶,其中分别装有三头奶牛所产的奶。

这些桶可能有不同的容积,也可能并没有完全装满。

然后他将桶 1 的牛奶倒入桶 2,然后将桶 2 中的牛奶倒入桶 3,然后将桶 3 中的牛奶倒入桶 1,然后再将桶 1 的牛奶倒入桶 2,如此周期性地操作,共计进行 100 次(所以第 100 次操作会是桶 1 倒入桶 2)。

Farmer John 将桶 a 中的牛奶倒入桶 b 时,他会倒出尽可能多的牛奶,直到桶 a 被倒空或是桶 b 被倒满。

请告诉 Farmer John 当他倒了 100 次之后每个桶里将会有多少牛奶。

输入格式
输入文件的第一行包含两个空格分隔的整数:第一个桶的容积 c1,以及第一个桶里的牛奶量 m1。

第二和第三行类似地包含第二和第三个桶的容积和牛奶量。

输出格式
输出三行,给出倒了 100 次之后每个桶里的牛奶量。

数据范围
1≤c1,m1≤109
输入样例:
10 3
11 4
12 5
输出样例:
0
10
2
样例解释
在这个例子中,每倒一次之后每个桶里的牛奶量如下:

初始状态: 3 4 5
1. 桶1->2 0 7 5
2. 桶2->3 0 0 12
3. 桶3->1 10 0 2
4. 桶1->2 0 10 2
5. 桶2->3 0 0 12
(之后最后三个状态循环出现……)

Ideas

模拟即可 O(N)

Code

# 模拟 时间复杂度O(N) 100 
dic = {}
for i in range(3):
dic[i] = list(map(int,input().split()))
# print(dic)
for i in range(100):
# 如果当前木桶的牛奶<=下一个木桶的剩余量,那么全倒进去
if dic[i%3][1] <= (dic[(i+1)%3][0] - dic[(i+1)%3][1]):
dic[(i+1)%3][1] += dic[i%3][1]
dic[i%3][1] = 0
# 如果当前木桶的牛奶>下一个木桶的剩余量,那么倒下一个木桶剩余量的牛奶进去
else:
dic[i%3][1] -= (dic[(i+1)%3][0] - dic[(i+1)%3][1])
dic[(i+1)%3][1] = dic[(i+1)%3][0]
# print(dic)
for i in dic.values():
print(i[1])