设两堆干草的重量分别为 A 和 B,令 d=∣A−B∣。
因为每次操作可以给 A 或 B 中的一个数加上 2k,所以从“差值”的角度看,一次操作等价于让 d 变成:
农夫约翰有两堆干草,重量分别为整数 A 和 B。他可以使用一种特殊的加料机器:每次操作时,他可以选择任意非负整数 p,并选择其中一堆干草,将其重量增加 2p。
约翰希望通过若干次操作,使得两堆干草的重量变得完全相同。请计算他所需的最少操作次数。
约束条件
第一行包含一个整数 T (1≤T≤104),表示测试用例的数量。 接下来 T 行,每行包含两个整数 A 和 B (∣A∣,∣B∣≤1018),用空格分隔,表示两堆干草的初始重量。
对于每个测试用例,输出一行一个整数,表示使两堆干草重量相等所需的最少操作次数。
输入
3
0 0
1 0
3 5
输出
0
1
1
说明
第一组:两堆重量都是 0,已经相等,无需操作,答案为 0。
第二组:重量为 1 和 0,差值 ∣1−0∣=1。1 恰好是 20,只需在较小堆 0 上加 20=1 即可,操作 1 次。
第三组:重量为 3 和 5,差值 ∣3−5∣=2。2 是 21,只需在较小堆 3 上加 21=2 即可,操作 1 次。
输入
4
100 100
-5 -5
0 0
2000000000 2000000000
输出
0
0
0
0
说明
所有测试用例中两堆干草的重量都已经相等,差值为 0。
第一组:100 与 100 相等。
第二组:-5 与 -5 相等,说明负数也适用。
第三组:0 与 0 相等,覆盖边界。
第四组:2000000000 与 2000000000 相等,展示较大但相等的数值。
所有这些情况都无需任何操作,答案为 0。
输入
3
1 6
7 10
10 18
输出
2
2
1
说明
第一组:重量 1 和 6,差值 d=5。
贪心过程:d=5 为奇数,操作次数加 1;由于 5mod4=1,令 d←4;然后不断除以 2 得到 d=1,操作次数再加 1 并结束。共需 2 次操作。
一种可行方案:给 1 加 22=4 得 5,再给 5 加 20=1 得 6。
第二组:重量 7 和 10,差值 d=3。
3 为奇数,操作次数加 1;3mod4=3,令 d←4;除以 2 得 2,再除以 2 得 1,操作次数再加 1 并结束。共需 2 次操作。
一种可行方案:给 7 加 21=2 得 9,再给 9 加 20=1 得 10。
第三组:重量 10 和 18,差值 d=8。
8 是 23,可以直接在一次操作中将较小堆增加 23=8,使两堆相等,因此答案为 1。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册