前言
这题主要考查贪心,但是题目说到分组得到答案,但其实也可以不分组也可以得到答案,所以可以想一想怎么不分组得到最小值。
看完提示的同学可以先再想一想如何解出这道题
一、题目
二、解题过程
1.证明过程
因为a^b<a+b,所以其实不用分组,把全部的数当成一组来异或,就可以得到最小值。
2.代码
#include<bits/stdc++.h>
using namespace std;
#define int LL
#define li inline
#define gc getchar
#define pc putchar
#define wr(n) write(n,false),pc('\n')
#define rep(a,b,c) for(int a=b;a<=c;++a)
#define loop(n) for(int i=0;i<n;++i)
#define loops(n) for(int i=0;i<=n;++i)
#define LL long long
const int N=1e6+10;
int n,ans;
//快读模板
int read(){
int x=0,f=0;
char ch=gc();
while('0'>ch||ch>'9')f|=ch=='-',ch=gc();
while('0'<=ch&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=gc();
return f?-x:x;
}
//快写模板
void write(int x){
if(x<0)pc('-'),x=-x;
if(x>9)write(x/10);
pc(x%10+'0');
return;
}
signed main(){
n=read();
for(int i=1;i<=n;++i){
int x=read();
ans^=x; //异或得到最小值
}
cout<<ans<<'\n';
return 0;
}
如果觉得对你有所帮助的话,请点个免费的赞吧!