题目传送门
题目大意
- 若 \(x\) 和 \(y\) 的第 \(k\) 个二进制位相同,结果的第 \(k\) 个二进制位为 \(0\);
- 若 \(x\) 和 \(y\) 的第 \(k\) 个二进制位不同,结果的第 \(k\) 个二进制位为 \(1\)。
题目描述
给定整数 \(n\) 和 \(m\),判断是否存在满足下列条件的数列 \(a\)。本题中数列元素的下标从 \(1\) 开始。
-
数列 \(a\) 的长度为 \(m\),数列 \(a\) 的每一项都为正整数。
-
\(a_1 \oplus a_2 \oplus \cdots \oplus a_m = n\),即数列 \(a\) 的所有项异或得到的结果等于 \(n\)。
-
数列 \(a\) 中所有元素的值都相同。
题目思路
对于第一组测试数据,数列 \(a\) 可以是 \([3,3,3]\),此时 \(a_1 \oplus a_2 \oplus a_3 = 3 \oplus 3 \oplus 3 = 3\)。
对于第二组测试数据,数列 \(a\) 可以是 \([2,2,2,2,2]\),此时 \(a_1 \oplus a_2 \oplus a_3 \oplus a_4 \oplus a_5 = 2 \oplus 2 \oplus 2 \oplus 2 \oplus 2 = 2\)。
我们可以得出规律,当 \(m\) 为奇数时, \(a_1 \oplus a_2 \oplus \cdots \oplus a_m = n\) 这个数列是成立的。
反之,当 \(m\) 为偶数时, \(a_1 \oplus a_2 \oplus \cdots \oplus a_m = n\) 则不成立。
但是我们看第三个样例,发现当 \(n=0\) 且 \(m\) 为奇数的时候,这个数列是不成立的。如数列 \(a\) 可以是 \([4,4,4]\) ,此时:\(a_1 \oplus a_2 \oplus a_3 = 4 \oplus 4 \oplus 4 = 1\), \(1 \neq 0\) ,因此不成立。
反之,发现当 \(n=0\) 且 \(m\) 为奇数的时候,数列成立。如数列 \(a\) 可以是 \([4,4,4,4]\) ,此时:\(a_1 \oplus a_2 \oplus a_3 \oplus a_4 = 4 \oplus 4 \oplus 4 \oplus 4 = 0\),数列成立。
代码实现
#include<bits/stdc++.h>//万能头
using namespace std;
int main(){
int t;
cin>>t;
int n,m;
for(int i=1;i<=t;i++){
cin>>n>>m;
if(m%2!=0){
if(n==0){
cout<<"No"<<endl;
}
else{
cout<<"Yes"<<endl;
}
}
else{
if(n==0){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
}
return 0;
}
标签:P10835,题目,数列,二进制位,int,cdots,云霄,FLA,oplus
From: https://www.cnblogs.com/M1--1e9/p/18367518