4424 - 倒水问题
时间限制 : 1 秒
内存限制 : 128 MB
假定两个水壶 A 和 B,供水量不限。可以使用三种方法装水:
- 给一个水壶装水;
- 把一个水壶倒空;
- 从一个水壶倒进另一个水壶。
当从一个水壶倒进另一个水壶时,如果第一个水壶倒空,或者第二个水壶装满就不能再倒了。例如,一个水壶 A 是 5 加仑和另一个水壶 B 是 6 加仑,水量是 8 加仑,则从水壶 A 倒进水壶 B 时,让水壶 B 充满水而水壶 A 剩 3 加仑水。
问题有 3 个参数:C_a,C_b 和 N,分别表示水壶 A 和 B 的容量,目标水量 N。问题的目标是,给出一系列倒水的步骤,使水壶 B 中的水量恰好是 N。
如果有多种操作方案,请给出操作次数最少的任意一种方案。
输入
第一行为数据组数 T。
接下来的 T 行,每行三个数字 C_a,C_b 和 N,意义如题目所示。
T 不超过 30,0 < C_a\le C_b,N\le C_b\le 1000,且 C_a 和 C_b 互质。
输出
输出共为 T 行,第一个数字为要达成的完成次数 a_i(题目保证存在解)。
接下来 a_i 个数字,表示各种操作:
- 1 操作:
fill A意为给 A 灌满水 - 2 操作:
fill B - 3 操作:
empty A意为将 A 中水倒空 - 4 操作:
empty B - 5 操作:
pour B A意为将 B 中水倒到 A 中(直到 A 满或者 B 中水没有剩余) - 6 操作:
pour A B
样例
输入
2 3 5 4 5 7 3
输出
6 2 5 3 5 2 5 6 1 6 1 6 4 6
输入
1 26 29 11
输出
22 1 6 1 6 4 6 1 6 4 6 1 6 4 6 1 6 4 6 1 6 4 6