[USACO18DEC]Mixing Milk (H题)

本文介绍了一道关于牛奶混合的模拟算法题,通过在三个不同容量的桶中反复转移牛奶,实现混合过程的模拟。文章详细解释了题目要求、数据规模及模拟思路,最后给出了完整的AC代码。

链接: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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值