好,发现与魔方的相似之处后再来思考一根柱子上的球如何能把相同颜色的放在一起,假设没有任何限制,就是给你一根柱子,让你把上面混乱的两种颜色球使颜色相同的变成连续的。如果是我的话肯定就是把上面的球无脑全部拿下来,同种颜色的放到一块,然后再无脑拼回去。好,此时再回归题目,我们能不能无脑把 A 柱上面的球全部拿下来分类呢?
如果 B 柱不去动他,我们就只能把A柱上的球挨个放到C柱上面,最后 C 柱(活成了 A 柱的模样)就变成了倒过来的 A 柱,对与解题貌似没有任何帮助。
所以,我们不得不去借助 B 柱了,我们要注意在借助 B 柱的时候不能打乱 B 柱原始的顺序,否则到调整 B 柱的时候需要借助 A 柱,如果需要打乱原始顺序的话 A 柱就白整了。
联系到上面无限制条件的方法,我们需要借助 B 柱给 A 柱中的某一个颜色腾出空间,让 A 柱上的某一种颜色能全部集中到一根柱子上去。
我们就假设 A 柱上有黑球和白球两种颜色吧,我们不妨记录其中白球的数量为 cnt 个,则黑球的数量就是 m-cnt 个,所以 B , C 柱上一个要留 cnt 个位置,一个要留 m-cnt 个位置,我们不妨把所有白球放到 B 柱上面去,所有黑球放到 C 柱上面去(反正都是对称的),所以我们需要把 B 柱上的前 cnt 个球移动到 C 柱上面,于是乎 B 柱留下了 cnt 个位置, C 柱留下了 m-cnt 个位置。如图:
接着我们从 A 柱上一个一个向外拿球,如果是白球就放到 B 柱,反之放到 C 柱,当 A 柱刚好拿完的时候, B , C 柱也刚好放满。此时 A 柱的白球和黑球被完美分开了,接下来我们只需要先把 B 柱上前 cnt 个来自 A 柱的白球放回 A 柱,接着把 C 柱上前 m-cnt 个黑球放回 A 柱,最后再把 C 柱上来自 B 柱的 cnt 个不知道什么颜色的球放回 B 柱,就完成了一次对 A 柱的完美调整。
由于放球有先进后出的属性,可以轻松验证最后 C 柱上 cnt 个来自 B 柱的球放回到 B 柱的时候排列顺序与从 B 柱拿走的时候不发生任何变化。由此便满足了我们所需要的一种调整方法。
接着对 B 柱用相同的方法进行调整,便可以让 A , B 变成伪纯色柱,再用上文对于伪纯色柱的方法操作就可以了。