链接:code forces
中文链接:洛谷
题目大意:
FJ有三个桶,每个桶都装有不同种类的牛奶,现在他打算混合这些牛奶。
过程:从桶一倒到桶二,从桶二倒到桶三,从桶三倒到桶一重复100次(倒一次算一次操作);
(假设现在桶1倒桶2,倒的过程中当桶1为空,或者桶2已满时停止)
数据大小:
输入文件的第一行包含两个空格分隔的整数:第一个桶的容积 c1,以及第一个桶里的牛奶量 m1。c1 和m1 均为正,并且不超过 10^9。第二和第三行类似地包含第二和第三个桶地容积和牛奶量。
思路:
数据不大,模拟过程就行,而且最大不会超过2*10^9,所以放心用int.
模拟过程:数字代表桶
1 ~ 2 ~ 3 ~ 0 ~ 1 ~ 2 ~ 3…
ac代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
struct but
{
long long cap;
long long temp;
};
but b[4];
int main()
{
for(int i = 1;i<=3;i++)
{
scanf("%lld %lld",&b[i].cap,&b[i].temp);
}
b[0] = b[3];
for(int i = 1;i<=100;i++)
{
int x = i%3;//第x个桶
if(!x)b[0] = b[3];
if(x == 2)b[3] = b[0];
ll sum = b[x+1].cap-b[x+1].temp;//需要多少牛奶才能填满下一个桶
if(b[x].temp >= sum)
{
b[x+1].temp+=sum;
b[x].temp-=sum;
}
else
{
b[x+1].temp+=b[x].temp;
b[x].temp = 0;
}
}
b[3] = b[0];
for(int i = 1;i<=3;i++)
printf("%lld\n",b[i].temp);
return 0;
}