给定?n?个非负整数?1,2,??,a1?,a2?,?,an?,你需要确定一个非负整数?x,使得?1⊕2⊕?a1?⊕a2?⊕?⊕an?⊕x?最小。
你需要计算?x?和?1⊕2⊕?a1?⊕a2?⊕?⊕an?⊕x。
其中?⊕?代表异或,x⊕y?在 C++ 中可表示为?x ^ y
。 对于两个非负整数?x,y,它们的异或是指,将它们作为二进制数,对二进制表示中的每一位进行如下运算得到的结果:
例如:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0。
输入共两行。
第一行一个整数?n,代表序列?a?的长度。
第二行?n?个整数?1,2,??,a1?,a2?,?,an?,代表序列?a。
输出共一行两个整数?x?和?1⊕2⊕?a1?⊕a2?⊕?⊕an?⊕x。
输入 #1
2
1 2
输出 #1
3 0
输入 #2
2
7 7
输出 #2
0 0
对于?100%100%?的数据,1≤n≤106,0≤ai?≤1018。
测试点 | n | ai? | 特殊性质 |
---|---|---|---|
1 | =1 | ≤103 | 无 |
2 | =2 | ≤103 | a1?=a2? |
3~4 | =2 | ≤103 | 无 |
5 | ≤103 | =0 | 无 |
6~8 | ≤103 | ≤103 | 无 |
9~11 | ≤106 | ≤103 | 无 |
12~13 | ≤106 | ≤1 | 无 |
14~20 | ≤106 | ≤1018 | 无 |
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
long long x=0;
for(int i=1;i<=n;i++){
long long a;
cin>>a;
x=x^a;
}
cout<<x<<" "<<0<<endl;
return 0;
}