#3767. XOR Sequences

XOR Sequences

题目描述

给定两个互不相同的非负整数 xxyy,我们定义两条无限序列 a1,a2,a3,a_1,a_2,a_3,\dotsb1,b2,b3,b_1,b_2,b_3,\dots 如下:

  • an=nxa_n = n \oplus x
  • bn=nyb_n = n \oplus y

这里 \oplus 表示按位异或运算。例如,当 x=6x=6 时,序列 aa 的前 8 项为

$$[\,1\oplus6,\,2\oplus6,\,3\oplus6,\,4\oplus6,\,5\oplus6,\,6\oplus6,\,7\oplus6,\,8\oplus6,\dots] = [7,4,5,2,3,0,1,14,\dots]. $$

(注意这里下标从 1 开始。)

你的任务是:求出序列 aa 与序列 bb 的最长公共子段长度。也就是说,找出最大的正整数 mm,使得存在 i,j1i,j\ge1 使得

$$a_i = b_j,\; a_{i+1} = b_{j+1},\;\dots,\;a_{i+m-1} = b_{j+m-1}. $$

子段(subsegment)指的是一个连续的片段 pl,pl+1,,pr\,p_l,p_{l+1},\dots,p_r,其中 1lr1\le l\le r


输入格式

第一行包含一个整数 tt1t1041\le t\le 10^4),表示测试用例的数量。 接下来描述 tt 个测试用例,每个测试用例占一行,包含两个整数 xxyy0x,y1090\le x,y\le10^9,且 xyx\neq y)。


输出格式

对每个测试用例,输出一个整数——序列 aa 与序列 bb 的最长公共子段长度。

4
0 1
12 4
57 37
316560849 14570961
1
8
4
33554432

说明

  • 样例 1: 当 x=0,y=1x=0,y=1 时,

    $ a=[1,2,3,4,5,6,7,\dots],\quad b=[0,3,2,5,4,7,6,\dots]. $

    可以证明不存在长度大于 1 的连续整数子段两序列同时包含,故答案为 1。

  • 样例 3: 当 x=57,y=37x=57,y=37 时,序列前若干项为

    $ a=[56,59,58,61,60,63,62,49,48,51,50,53,52,55,54,\mathbf{41,40,43,42},45,\dots] $

    $ b=[36,39,38,33,32,35,34,45,44,47,46,\mathbf{41,40,43,42},53,\dots] $

    它们的公共子段 [41,40,43,42][41,40,43,42] 长度为 4。


提示

  • 序列下标从 1 开始。
  • 异或运算 \oplus 是对两个整数按二进制位逐位做“不同为 1、相同为 0” 的运算。
  • 由于序列是无限的,实际只需关注能构成最长公共子段的那一段即可。
  • t104t\le10^4  0x,y109\;0\le x,y\le10^9