题目描述
程小盟学习了异或运算,现在她开始异或了。
她现在有 n 个数字,她必须选中一个数字将它异或 k,其余数字都不变。
现在程小盟想让 n 个数字的和变得尽可能大,请问这些数字的和最多为多大。
输入格式
第一行输入两个正整数 n, k
第二行输入 n 个正整数,其中第 i 个正整数为 ai
输出格式
输出一行一个整数表示答案。
样例输入content_copy
7 3
1 2 3 4 5 6 7
样例输出content_copy
31
提示/说明
【说明】
将数字 4 异或 3 得到 7,此时整个数组的和变成 31。
【备注】
对于 20% 的数据,有 n = 1
对于 60% 的数据,有 n ≤ 1000,1 ≤ ai, k ≤ 1000 对于 80% 的数据,有 n ≤ 105, 1 ≤ ai, k ≤ 10002T 对于 100% 的数据,有 n ≤ 105, 1 ≤ ai, k ≤ 109
#include<bits/stdc++.h>
using namespace std;
long long n,k,x,y,f,cnt1=0;
long long array_x[100100];
int main(){
scanf("%lld %lld",&n,&k);
getchar();
for(int i=1;i<=n;i++){
scanf("%lld",&array_x[i]);
cnt1+=array_x[i];
}
getchar();
long long maxx=array_x[1]^k;
if(n==1){
maxx=array_x[1]^k;
cout<<maxx;
return 0;
}
for(int i=1;i<=n;i++){
f=array_x[i]^k;
if(f>maxx){
maxx=f;
y=i;
}
}
x=maxx+cnt1;
cout<<maxx+cnt1-array_x[y];
return 0;
}