[洛谷]P5116 [USACO18DEC]Mixing Milk (#模拟)

题目描述

农业,尤其是生产牛奶,是一个竞争激烈的行业。Farmer John 发现如果他不在牛奶生产工艺上有所创新,他的乳制品生意可能就会受到重创!

幸运的是,Farmer John 想出了一个好主意。他的三头获奖的乳牛,Bessie、Elsie 和 Mildred,各自产奶的口味有些许不同,他打算混合这三种牛奶调制出完美的口味。

为了混合这三种不同的牛奶,他拿来三个桶,其中分别装有三头奶牛所产的奶。这些桶可能有不同的容积,也可能并没有完全装满。然后他将桶 11 的牛奶倒入桶 22,然后将桶 22 中的牛奶倒入桶 33,然后将桶 33 中的牛奶倒入桶 11,然后再将桶 11 的牛奶倒入桶 22,如此周期性地操作,共计进行 100100 次(所以第 100100 次操作会是桶 11 倒入桶 22)。当 Farmer John 将桶 aa 中的牛奶倒入桶 bb 时,他会倒出尽可能多的牛奶,直到桶 aa 被倒空或是桶 bb 被倒满。

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

输入输出格式

输入格式:

输入文件的第一行包含两个空格分隔的整数:第一个桶的容积 c_1c1​,以及第一个桶里的牛奶量 m_1m1​。c_1c1​ 和 m_1m1​ 均为正,并且不超过 10^9109。第二和第三行类似地包含第二和第三个桶地容积和牛奶量。

输出格式:

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

输入输出样例

输入样例#1

10 3
11 4
12 5

输出样例#1

0
10
2

说明

在这个例子中,每倒一次之后每个桶里的牛奶量如下:

  1. 初始状态:3 4 5
  2. 桶1->2:0 7 5
  3. 桶2->3:0 0 12
  4. 桶3->1:10 0 2
  5. 桶1->2:0 10 2
  6. 桶2->3:0 0 12

(之后最后三个状态循环出现……)


思路

似乎连贪心都不需要,直接模拟即可。

#include 
#include 
using namespace std;
int s1,s2,a[4],b[4];
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	register int i,j;
	for(i=0;i<3;i++,cin>>a[i]>>b[i]);//a[i]是容量,b[i]是桶里牛奶的数量 
	for(i=1;i<=100;i++)
	{
		s1=(i-1)%3+1;//s1是要将倒出牛奶的桶 
		if(s1==3)//桶3给桶1 
		{
			s2=1;//s2是倒入的桶,取桶s2剩余容积和桶s1牛奶数量的最小值 
		}
		else//否则给下一个桶 
		{
			s2=s1+1;
		}
		int minx=min(a[s2]-b[s2],b[s1]);//minx是倒出牛奶的数量,取 
		b[s1]-=minx;//桶s1倒出 
		b[s2]+=minx;//桶s2倒入 
	}
	cout<

 

你可能感兴趣的:(洛谷原创,模拟,USACO)