4546: T1 小盟学异或

题目描述

程小盟学习了异或运算,现在她开始异或了。

 

她现在有 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;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值