CF1979B.XOR Sequences

入门

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定两个不同的非负整数 xx 和 yy。考虑两个无限序列 a1,a2,a3,…a_1, a_2, a_3, \ldots 和 b1,b2,b3,…b_1, b_2, b_3, \ldots,其中

  • an=n⊕xa_n = n \oplus x;
  • bn=n⊕yb_n = n \oplus y。

这里,x⊕yx \oplus y 表示整数 xx 和 yy 的按位异或操作。

例如,当 x=6x = 6 时,序列 aa 的前 88 个元素为:[7,4,5,2,3,0,1,14,…][7, 4, 5, 2, 3, 0, 1, 14, \ldots]。注意,元素的下标从 11 开始。

你的任务是求出序列 aa 和 bb 的最长公共子段的长度。换句话说,找到最大的正整数 mm,使得存在某些 i,j≥1i, j \ge 1,满足 ai=bj,ai+1=bj+1,…,ai+m−1=bj+m−1a_i = b_j, a_{i + 1} = b_{j + 1}, \ldots, a_{i + m - 1} = b_{j + m - 1}。

†^\dagger 序列 pp 的一个子段是指 pl,pl+1,…,prp_l, p_{l+1}, \ldots, p_r,其中 1≤l≤r1 \le l \le r。

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4)——表示测试用例的数量。接下来的每组测试用例包含一行,包含两个整数 xx 和 yy(0≤x,y≤109,x≠y0 \le x, y \le 10^9, x \neq y)——表示序列的参数。

输出格式

对于每组测试用例,输出一个整数,表示最长公共子段的长度。

输入输出样例

  • 输入#1

    4
    0 1
    12 4
    57 37
    316560849 14570961

    输出#1

    1
    8
    4
    33554432

说明/提示

在第一个测试用例中,序列 aa 和 bb 的前 77 个元素如下:

a=[1,2,3,4,5,6,7,…]a = [1, 2, 3, 4, 5, 6, 7, \ldots]

b=[0,3,2,5,4,7,6,…]b = [0, 3, 2, 5, 4, 7, 6, \ldots]

可以证明不存在正整数 kk 使得序列 [k,k+1][k, k + 1] 在 bb 中作为子段出现。因此答案为 11。

在第三个测试用例中,序列 aa 和 bb 的前 2020 个元素如下:

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

b=[36,39,38,33,32,35,34,45,44,47,46,41, 40, 43, 42,53,52,55,54,49,…]b = [36, 39, 38, 33, 32, 35, 34, 45, 44, 47, 46, \textbf{41, 40, 43, 42}, 53, 52, 55, 54, 49, \ldots]

可以证明,最长的公共子段之一是 [41,40,43,42][41, 40, 43, 42],长度为 44。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页