首页 > 试题广场 >

x_to_y_2

[编程题]x_to_y_2
  • 热度指数:159 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定两个整数 x,y,你每次可以做如下两种操作之一:
  • x= \lfloor\frac{x}{2}\rfloor
  • 选择任意一个整数 z,令 x= x \ |\ z
请问最少操作几次才可以让 x 变成 y
\rule{4cm}{0.1pt}
^{\text{∗}} | :表示按位或,例如 1\ |\ 2=3

输入描述:
本题有多组测试数据

第一行输入一个整数 T(1\leq T \leq 10^5),表示数据组数。

对于每组测试数据:

每行输入两个整数 x,y(0\leq x, y\leq10^{18})


输出描述:
对于每组测试数据,输出把 x 变成 y 的最小操作次数。
示例1

输入

4
1 4
0 5
8 8
123987 444

输出

2
1
0
12

说明

对于第一组测试数据,一种操作次数最少的方式是:先用操作 2,选 z=9,令 x = 1 | 9 = 9,然后用操作 1,令 x = \left\lfloor\frac{9}{2}\right\rfloor = 4 = y,共 2 次操作。
发表于 2025-12-11 11:43:22 回复(0)