题目链接:http://codeforces.com/problemset/problem/862/C
题目大意:给出一个N和x,用N个不同的数使用^运算符算出x
题解:如果N=1,x本身即为答案
如果N=2并且x等于0,无答案,除非两个相同的数才能^出0,
如果N=2,X不等于0,用0和X做答案即可,0^X=X
N>3时,用两个很大的数(用很大的数是为了前面能够用小的数凑到N),假设为a,b(题目要求N不超过10的5次方,所以a,b超过10的5次方即可)
两个数进行^ ,再^X,再异或两个数,还是X
,多余的数用一个循环找出来
例如:0 ^ 1 ^ 2 ^ a ^b ^ a ^ b ^x ^ 0 ^ 1 ^ 2=x
#include <bits/stdc++.h>
using namespace std;
int main(){
// printf("%d",3<<18);
int n, x;
cin>>n>>x;
if (n == 1){
cout <<"YES" << endl << x;
}
else
if (n == 2 && x == 0)
cout<<"NO"<<endl;
else
if (n == 2) {
cout<<"YES"<<endl << x <<" "<<0<<endl;;
}
else{
cout<<"YES"<<endl;
for (int i = 0; i < n - 3; i++) {
x ^= i;
cout<<i<<" ";
}
int a = (3 << 18);
int b = a/2;
cout<<a<<" "<<b<<" "<<(a^b^x)<<endl;
}
return 0;
}