牛客小白月赛138
C
AND and OR
牛客竞赛
未评级
原题
← BD →

AND and OR官方中文

题目描述

官方中文

给出一个长度为 $n$ 的数组 $a = a_1,a_2,\dots,a_n$ 和一个非负整数 $k$,请判断是否存在一个二元组 $(i,j)\left(1\le i < j\le n\right)$ 满足下面的表达式: $(a_i \operatorname{and}^\texttt{[1]}a_j) + (a_i\operatorname{or}^\texttt{[2]}a_j) = k$ 若存在,请给出一个满足要求的二元组 $(i,j)$ ,否则输出 $-1$。 【名词解释】 $\operatorname{and}$$^\texttt{[1]}$:指位运算中的按位与(Bitwise AND),对两个整数的二进制表示按位进行与运算。如果您需要更多位运算相关的知识,可以参考 [**OI-Wiki的相关章节**](https://oi-wiki.org/math/bit/#%E4%B8%8E%E6%88%96%E5%BC%82%E6%88%96)。 $\operatorname{or}$$^\texttt{[2]}$:指位运算中的按位或(Bitwise OR),对两个整数的二进制表示按位进行或运算。如果您需要更多位运算相关的知识,可以参考 OI-Wiki的相关章节。官方中文

输入格式

官方中文

每个测试文件均包含多组测试数据。第一行输入一个整数 $t\ (1\le t\le 10^4)$ 代表数据组数,每组测试数据描述如下:官方中文

第一行输入两个整数 $n,k\ (2\le n\le 2\times10^5;\,0\le k\le10^9)$,表示数组的长度、给定的非负整数。 第二行输入 $n$ 个非负整数 $a_1,a_2,\ldots,a_n\ (0\le a_i\le10^9)$,表示该数组。官方中文

除此之外,保证单个测试文件的 $n$ 总和不超过 $2\times10^5$。官方中文

输出格式

官方中文

如果存在满足要求的二元组,输出两个正整数 $i,j\ (1\le i<j\le n)$ ,表示找到的二元组 $(i,j)$;否则,输出 $-1$。官方中文

如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。官方中文

样例

Input #1
5
5 30
15 0 15 0 15
5 13
17 3 5 6 10
3 6
1 2 3
4 12
1 2 4 8
2 1000000000
0 0
Output #1
1 3
2 5
-1
3 4
-1
对于第一组数据,可以选择 $(i,j)=(1,3)$,因为 $a_1\operatorname{and}a_3 = 15$,$a_1\operatorname{or}a_3 = 15$,$15+15=30$。 对于第二组数据,可以选择 $(i,j)=(2,5)$,因为 $a_2\operatorname{and}a_5 = 2$,$a_2\operatorname{or}a_5 = 11$,$2+11=13$。 对于第三组数据,可以证明不存在一组满足要求的 $(i,j)$。
题目信息
题号
nc141374pc
时间限制
1 s
内存限制
512 MB

题面与样例版权归 牛客竞赛 及出题人所有;中文翻译由 AI 生成(官方原文),如有出入请以原文为准。