题目要求判断是否存在四个互不相同的下标 i,j,p,q,使得
bi⊗bj⊗bp⊗bq=S其中 ⊗ 为题目定义的运算(按位不同则得1,相同得0)。
在数字信号处理中,常常需要验证能否从一组校验码中选出四个不同的码元,使得它们通过某种按位运算后得到特定的校验值。
现定义一种二元运算 ⊗:对于两个非负整数 x 和 y,将它们的二进制表示对齐,逐位进行独立计算:若该位上两数不同,则结果该位为 1;若相同,则为 0。
给定一个长度为 n 的非负整数序列 b1,b2,…,bn 以及一个目标值 S。请你判断是否存在四个互不相同的下标 p,q,r,s(即 1≤p<q<r<s≤n 且两两不同),使得
bp⊗bq⊗br⊗bs=S.若存在则回答 Yes,否则回答 No。
约束条件:
第一行包含一个整数 T,表示测试数据组数。 接下来每组数据按以下格式给出: 第一行包含两个整数 n 和 S,分别表示序列长度和目标值。 第二行包含 n 个整数 b1,b2,…,bn,表示序列中的元素。
对于每组测试数据,输出一行字符串,若存在满足条件的四个位置则输出 Yes,否则输出 No。
输入
2
4 0
5 6 5 6
4 3
1 1 1 1
输出
Yes
No
说明
第一组数据:序列为 5 6 5 6,目标值 S=0。运算 ⊗ 即按位异或(⊕)。选取四个不同下标,对应的值为 5, 6, 5, 6,其异或和为 5⊕6⊕5⊕6=0,满足条件,输出 Yes。
第二组数据:序列为 1 1 1 1,S=3。任意四个不同下标的异或和均为 1⊕1⊕1⊕1=0,不可能等于 3,因此输出 No。
输入
1
5 0
7 3 4 8 0
输出
Yes
说明
序列为 7 3 4 8 0,S=0。可选择下标 1, 2, 3, 5 对应的值 7, 3, 4, 0,计算异或和:7⊕3⊕4⊕0=(7⊕3)⊕4⊕0=4⊕4⊕0=0,恰好等于目标值 0。四个下标互不相同且满足 1<2<3<5,因此输出 Yes。
输入
1
6 10
1 2 4 8 16 32
输出
No
说明
序列为 1 2 4 8 16 32,每个元素都是不同的 2 的幂,其二进制表示中恰有一个 1。任选四个不同下标的数,它们的异或和等价于将四个不同的二进制位同时置为 1,其余位为 0,因此结果中必然恰好有 4 个 1。
目标值 S=10 的二进制表示为 1010,仅包含 2 个 1,不可能由任意四个不同元素的异或得到,故输出 No。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册