S40903.9-3 量取魂泉

传统题 时间 1000 ms 内存 256 MiB 3 尝试 0 已通过 0

9-3 量取魂泉

量取魂泉

意识迷宫的第三层,是一片由漂浮木桶组成的湖泊。湖面上没有水,只有乳白色的雾气和无数悬在半空的木桶。每个木桶上都刻着容量刻度,有些已经盛满了泛着幽光的液体,有些则是空的。

"魂泉。"Echo说,"Zero用这些木桶藏了不同分量的意识碎片。你要把它们互相倾倒,直到某个木桶里出现特定的分量。"

"倒来倒去?"CC蹲下去,用手指敲了敲一个空桶,"这有啥子难的?"

"难在最少步数。"你说,"而且不能凭空变出液体,也不能凭空倒掉——你只能把一个桶倒满、倒空,或者倒进另一个桶里,直到倒空或倒满为止。每一次操作都要算一步。"

"那如果反复倒来倒去,不是会兜圈子?"

"所以你要记住每一组水位组合是否曾经出现过。"你说,"如果某个组合已经试过,再走到同样的局面就是浪费。只有全新的水位组合才值得继续探索。"

你开始推演。三个木桶的容量像三座不同高度的塔,液体在它们之间流动,每一次倾倒都改变着全局的平衡。你把每一种水位组合都刻进记忆——(x,y,z)(x, y, z) 是一个状态,一旦重复就不再踏入。你像在一个看不见的迷宫里穿行,每一个岔路口都是一次倾倒的选择。

屏幕上跳出了结果:最少需要四十七步才能量取到目标分量。

"又是四十七。"CC说。

"四十七步。"Echo的声音里有一丝若有若无的笑意,"Zero把它当作默认的烙印——当你不知道答案该写什么时,它就会出现。"

"那这答案可信不?"

"有时候可信。"Echo说,"有时候……是陷阱。"


题目描述

三个桶,容量分别为 a,b,ca, b, c。初始状态给定,求达到目标状态的最少倒水步数。

输入格式

a,b,ca, b, c,初始状态,目标状态。

输出格式

最少步数,或不可能。

输入样例

4 4
6 2 1 3

输出样例

4���������������
4���������������
6���������������
2���������������
1���������������
3���������������
����������������
����������������
����������������
����������������
����������������
����������������
����������������
����������������
����������������
����������������

提示

  • 将每个水位组合视为一个状态,记录已访问的状态避免循环。
  • 六种操作:倒满、倒空、互倒。

倒水问题解开后,湖面上出现了一座桥——由光构成的桥,通向第四层。

"走吧。"Echo说。

在线编程 IDE

建议全屏模式获得最佳体验