总结:
这次考试考得非常的差,300分的题目只考了110。好不容易老师出了一波水题,我……
废话不多说,这次的题目同样是USACO的题目。总体难度不大,应该是普及-。
T1:Mixing Milk
一开始这道题目我想到了一道题,母亲的牛奶。但仔细一看题, 就不一样。就是将3个桶里的元素(牛奶)倒来倒去,有两个规则:1.如果一个桶倒到另一个桶时,他装不下那么多,那就将他装满即可。2.如果他装的下,那就倒给他。
我们可以立即想出一个非常暴力的方法,模拟枚举。但是这里要注意了(我就是这里被坑了……),我们要循环的次数是100/3=33次还要手动+1。所以这里只要循环33次就好了。
而我们可以接着往下看,样例解释已经说明了他其实可以是循环节。也就是说,循环可以简化成4。但考试的时候,我还是用了第一种方法。
部分代码(核心)a数组是容量,b数组为牛奶总数
n=3;
for(int i=1;i<=33;++i)
{
out=(i-1)%n+1;//out,求出现在要倒元素的桶,in就是out要倒的桶;
if(out==n)//要构成循环节
in=1;
else
in=out+1;//接下来是两种情况
if(a[in]-b[in]>=b[out])
{
b[in]+=b[out];
b[out]=0;
}
else
{
b[out]-=(a[in]-b[in]);
b[in]=a[in];
}
}
最后,愉快的输出b数组就好了。