MENU

【洛谷做题日记】P5116 [USACO18DEC]Mixing Milk

June 21, 2019 • Serious

这是我第一次写这些东西,文笔不好,凑合着看吧。。。

题目描述

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

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

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

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

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

输出格式:

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

输入输出样例
输入样例:

10 3
11 4
12 5

输出样例:

0
10
2

题解

第一,如果我们把100%3的话是4,所以我们其实只需要做4次(解题里看到的
所以我们可以先建3个数组,然后不用for直接输入(似乎会节省时间)
int c[4],m[4],i;
cin>>c[1]>>m[1]>>c[2]>>m[2]>>c[3]>>m[3];

然后搞个for直接开始操作。
我们先吧一桶牛奶倒到下一桶里面。
m[a+1]+=m[a];
m[a]=0;

然后将溢出的倒回去
if(m[a+1]>c[a+1])
{
m[a]+=m[a+1]-c[a+1];
m[a+1]=c[a+1];
}

但是要注意循环不应该到4,并且如果循环到3的话,牛奶应该倒在第一桶,下面是完整代码。

#include<iostream>
using namespace std;
int main()
{
    int c[5],m[5],i,j;
    cin>>c[1]>>m[1]>>c[2]>>m[2]>>c[3]>>m[3];
    for(j=1;j<=3;j++)
    {
        if(j==3)
        {
            m[1]+=m[j];
            m[j]=0;
            if(m[1]>c[1])
            {
                m[j]+=m[1]-c[1];
                m[1]=c[1];
            }
        }
        else
        {
            m[j+1]+=m[j];
            m[j]=0;
            if(m[j+1]>c[j+1])
            {
                m[j]+=m[j+1]-c[j+1];
                m[j+1]=c[j+1];
            }
        }
    }
    j=1;
    if(j==3)
    {
        m[1]+=m[j];
        m[j]=0;
        if(m[1]>c[1])
        {
            m[j]+=m[1]-c[1];
            m[1]=c[1];
        }
    }
    else
    {
        m[j+1]+=m[j];
        m[j]=0;
        if(m[j+1]>c[j+1])
        {
            m[j]+=m[j+1]-c[j+1];
            m[j+1]=c[j+1];
        }
    }
    cout<<m[1]<<endl<<m[2]<<endl<<m[3];
    return 0;
}
Last Modified: July 20, 2022