A. Add or XOR
问题描述
给定两个非负整数 和 。你可以对 进行两种类型的操作,任意次数,任意顺序:
- 。此操作的成本为 。
- ,其中 表示按位异或操作。此操作的成本为 。
现在要求你使 。如果可能,输出最小成本;否则,报告不可能。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的唯一一行包含四个整数 () — 给定的两个整数以及两种操作的相应成本。
输出
对于每个测试用例,输出一个整数 — 使 的最小成本,如果不可能则输出 。
题解
第二种操作(与1进行异或)当 是偶数时会使 的值增加1,当 是奇数时会使 的值减少1。
我们只能在 的情况下从 到达 ,因为两种操作都只能增加 (除了当 是奇数时与1进行异或,这会使 减少1)。
策略如下:
- 如果 且 是奇数,我们可以通过一次异或操作到达 ,成本为 。
- 如果 ,不需要操作,所以返回 。
- 如果 ,我们需要将 增加 个单位。
- 否则我们无法从 到达 ,所以返回
-1。
对于每个单位的增加,我们可以:
- 使用操作1(加1),成本为 。
- 当 是偶数时,使用操作2(与1进行异或),成本为 。
由于数据量很小,我们可以直接将 逐一增加直到达到 ,并相应地计算成本。
但实际上,成本可以直接计算:
- 如果 ,总是使用操作1(加1)从 到达 ,成本为 。
- 否则,成本 ,如果 是奇数,我们还需要一次类型1或类型2的操作。