P10835 『FLA - I』冲云霄v

题目传送门

题目大意

  • \(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;
}
posted @ 2024-08-19 16:05  M1_Byte  阅读(34)  评论(0)    收藏  举报