CF1946D.Birthday Gift

普及+/提高

通过率:0%

AC君温馨提醒

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

题目描述

Yarik 的生日快到了,Mark 决定送给他一个长度为 nn 的数组 aa。

Mark 知道 Yarik 非常喜欢位运算,并且他还有一个最喜欢的数字 xx,所以 Mark 想要找到最大的整数 kk,使得可以选择 kk 对数对 [l1,r1][l_1, r_1]、[l2,r2][l_2, r_2]、…\ldots、[lk,rk][l_k, r_k],满足:

  • l1=1l_1 = 1。
  • rk=nr_k = n。
  • 对于所有 ii,li≤ril_i \le r_i。
  • 对于所有 ii,ri+1=li+1r_i + 1 = l_{i + 1},1≤i<k1 \le i < k。
  • (al1⊕al1+1⊕…⊕ar1)∣(al2⊕al2+1⊕…⊕ar2)∣…∣(alk⊕alk+1⊕…⊕ark)≤x(a_{l_1} \oplus a_{l_1 + 1} \oplus \ldots \oplus a_{r_1}) \mid (a_{l_2} \oplus a_{l_2 + 1} \oplus \ldots \oplus a_{r_2}) \mid \ldots \mid (a_{l_k} \oplus a_{l_k + 1} \oplus \ldots \oplus a_{r_k}) \le x,其中 ⊕\oplus 表示按位异或运算,∣\mid 表示按位或运算。

如果不存在这样的 kk,输出 −1-1。

输入格式

每组测试数据包含多个测试用例。第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4)——测试用例的数量。接下来的每组测试用例描述如下。

每个测试用例的第一行包含两个整数 nn 和 xx(1≤n≤105,0≤x<2301 \le n \le 10^5, 0 \le x < 2^{30})——数组 aa 的长度和数字 xx。

每个测试用例的第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(0≤ai<2300 \le a_i < 2^{30})——数组 aa 本身。

保证所有测试用例中 nn 的总和不超过 10510^5。

输出格式

对于每个测试用例,输出一个整数,表示最大的合适的 kk,如果不存在这样的 kk,输出 −1-1。

输入输出样例

  • 输入#1

    8
    3 1
    1 2 3
    2 2
    1 1
    2 2
    1 3
    2 3
    0 0
    3 2
    0 0 1
    4 2
    1 3 3 7
    2 2
    2 3
    5 0
    0 1 2 2 1

    输出#1

    2
    2
    1
    2
    3
    -1
    1
    2

说明/提示

在第一个测试用例中,可以取 k=2k=2,选择两个区间 [1,1][1, 1] 和 [2,3][2, 3],(1)∣(2⊕3)=1(1) \mid (2 \oplus 3) = 1。可以证明 22 是最大可能的答案。

在第二个测试用例中,区间 [1,1][1, 1] 和 [2,2][2, 2] 合适,(1)∣(1)=1(1) \mid (1) = 1。无法再分更多的区间。

在第三个测试用例中,无法选择 22 个区间,因为 (1)∣(3)=3>2(1) \mid (3) = 3 > 2,所以最优答案是 11。

由 ChatGPT 4.1 翻译

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

首页