Mixing Milk
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Farming is competitive business – particularly milk production. Farmer John figures that if he doesn’t innovate in his milk production methods, his dairy business could get creamed! Fortunately, Farmer John has a good idea. His three prize dairy cows Bessie, Elsie, and Mildred each produce milk with a slightly different taste, and he plans to mix these together to get the perfect blend of flavors.
To mix the three different milks, he takes three buckets containing milk from the three cows. The buckets may have different sizes, and may not be completely full. He then pours bucket 11 into bucket 22, then bucket 22 into bucket 33, then bucket 33 into bucket 11, then bucket 11 into bucket 22, and so on in a cyclic fashion, for a total of 100100 pour operations (so the 100100th pour would be from bucket 11 into bucket 22). When Farmer John pours from bucket a into bucket b, he pours as much milk as possible until either bucket a becomes empty or bucket b becomes full.
Please tell Farmer John how much milk will be in each bucket after he finishes all 100100 pours.
Input
The first line of the input file contains two space-separated integers: the capacity c1c1 of the first bucket, and the amount of milk m1m1 in the first bucket. Both c1c1 and m1m1 are positive and at most 11 billion, with c1≤m1c1≤m1. The second and third lines are similar, containing capacities and milk amounts for the second and third buckets.
Output
Please print three lines of output, giving the final amount of milk in each bucket, after 100100 pour operations.
Example
input
Copy
10 3
11 4
12 5
output
Copy
0
10
2
Note
In this example, the milk in each bucket is as follows during the sequence of pours:
Initial State: 3 4 5
\1. Pour 1->2: 0 7 5
\2. Pour 2->3: 0 0 12
\3. Pour 3->1: 10 0 2
\4. Pour 1->2: 0 10 2
\5. Pour 2->3: 0 0 12
(The last three states then repeat in a cycle …)
题目大意
给3个桶,每个桶都有一个容量和一开始的牛奶的数量,然后从桶1倒去桶2,直到倒满桶2(即桶1可能有剩余),然后桶2倒去桶3,桶3倒去桶1,循环往复。问倒了100次以后,各个桶的牛奶的数量。
题目分析
水题……直接模拟就行了。
循环肯定想到取模。先计算出下一个要倒的桶和现在的桶,然后检测下一个桶的剩余容量,如果现在桶的牛奶数大于容量,就把下一个桶牛奶数置满,现在桶的牛奶数减去倒的牛奶数。如果小于容量,则将现在桶的牛奶置零,下一个桶的牛奶数加就行了。
代码
#include <cstdio>
using namespace std;
int c[4], m[4];
int main(int argc, char const *argv[]) {
for(int i = 1; i <= 3; i++)
scanf("%d%d", &c[i], &m[i]);
for(int i = 0; i < 100; i++){
int a, b;
a = i % 3 + 1;
b = (a == 3? 1: a + 1);
int need = c[b] - m[b];
if(m[a] >= need){
m[a] -= need;
m[b] = c[b];
}else{
m[b] += m[a];
m[a] = 0;
}
}
for(int i = 1; i <= 3; i++)
printf("%d\n", m[i]);
return 0;
}