#CF2139C. 蛋糕分配
蛋糕分配
C. 蛋糕分配
时间限制: 每测试 秒
内存限制: 每测试 兆字节
Chocola 和 Vanilla 喜欢蛋糕。今天,蛋糕店的经理给了他们总共 个蛋糕。蛋糕被平均分配,因此他们每人最初得到 个蛋糕。
然而,Chocola 和 Vanilla 现在想要重新分配蛋糕,使得 Chocola 最终拥有恰好 个蛋糕,而 Vanilla 获得剩余的 个蛋糕。
在每一步中,他们可以执行以下两种操作之一:
- Chocola 将她一半的蛋糕给 Vanilla。此操作仅在 Chocola 当前拥有偶数个蛋糕时允许执行。
- Vanilla 将她一半的蛋糕给 Chocola。此操作仅在 Vanilla 当前拥有偶数个蛋糕时允许执行。
你的任务是确定达到目标分配所需的最少步数,并输出达到该最小值的任意有效操作序列。
可以证明,在给定的约束条件下,有效解总是存在,且所需的最小步数不超过 。
输入格式
每个测试包含多个测试用例。第一行包含测试用例的数量 。接下来是每个测试用例的描述。
每个测试用例的第一行包含两个整数 和 — 每人最初获得 个蛋糕, 是重新分配后 Chocola 应拥有的蛋糕数量。
输出格式
对于每个测试用例,输出一个整数 ,表示他们重新分配蛋糕所需的最少步数。
在下一行,输出 个整数 ,其中 表示在第 步中,Chocola 将她一半的蛋糕给了 Vanilla(操作 ), 表示 Vanilla 将她一半的蛋糕给了 Chocola(操作 )。
样例
输入
4
2 3
2 4
3 7
2 5
输出
2
2 1
0
3
2 2 1
2
1 2
样例解释
在第一个测试用例中,他们可以使用以下步骤,使得 Chocola 恰好拥有 个蛋糕,Vanilla 恰好拥有 个蛋糕。我们用 表示 Chocola 当前拥有 个蛋糕,Vanilla 当前拥有 个蛋糕。
$$\{4, 4\} \xrightarrow{o_1 = 2} \{6, 2\} \xrightarrow{o_2 = 1} \{3, 5\} $$在第二个测试用例中,Chocola 已经拥有恰好 个蛋糕,Vanilla 已经拥有恰好 个蛋糕,因此不需要任何操作。
在第三个测试用例中,他们可以使用以下步骤,使得 Chocola 恰好拥有 个蛋糕,Vanilla 恰好拥有 个蛋糕。
$$\{8, 8\} \xrightarrow{o_1 = 2} \{12, 4\} \xrightarrow{o_2 = 2} \{14, 2\} \xrightarrow{o_3 = 1} \{7, 9\} $$