CF1362A.Johnny and Ancient Computer

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Johnny and Ancient Computer

题目描述

Johnny 最近发现了一台古老且损坏的计算机。这台机器只有一个寄存器,只能存放一个变量。每次操作时,你可以将寄存器中的数的二进制位向左或向右移动最多三位。右移操作如果会截断某些 11,则不允许进行。因此,实际上每次操作你可以将当前数乘以 224488,或者在当前数能被选定的除数整除时,将其除以 224488

具体来说,如果寄存器中存放着正整数 xx,一次操作后它可以被替换为以下之一:

  • x×2x \times 2
  • x×4x \times 4
  • x×8x \times 8
  • x/2x / 2,如果 xx 能被 22 整除
  • x/4x / 4,如果 xx 能被 44 整除
  • x/8x / 8,如果 xx 能被 88 整除

例如,如果 x=6x = 6,一次操作后它可以变为 12122424484833。由于 66 不能被 4488 整除,所以只有这四种替换方式。

现在 Johnny 想知道,如果他在寄存器中放入 aa,并希望最终得到 bb,他最少需要多少次操作。

输入格式

输入包含多组测试数据。第一行包含一个整数 tt1t10001 \leq t \leq 1000),表示测试用例的数量。接下来的 tt 行,每行描述一个测试用例。

每个测试用例包含一行,包含两个整数 aabb1a,b10181 \leq a, b \leq 10^{18}),分别表示初始值和目标值。

输出格式

输出 tt 行,每行输出一个整数,表示 Johnny 需要执行的最少操作次数。如果无法得到 bb,则输出 1-1

说明/提示

在第一个测试用例中,Johnny 可以通过右移一位(即除以 22)将 1010 变为 55

在第二个测试用例中,Johnny 可以通过左移两位(即乘以 44)将 1111 变为 4444

在第三个测试用例中,Johnny 无法将 1717 变为 2121

在第四个测试用例中,初始值和目标值相等,所以 Johnny 需要 00 次操作。

在第五个测试用例中,Johnny 可以通过两次右移:先右移两位(除以 44),再右移三位(除以 88),将 9696 变为 33

由 ChatGPT 4.1 翻译

样例

10
10 5
11 44
17 21
1 1
96 3
2 128
1001 1100611139403776
1000000000000000000 1000000000000000000
7 1
10 8
1
1
-1
0
2
2
14
0
-1
-1

在线编程 IDE

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