题目大意:给定 n <script type="math/tex" id="MathJax-Element-17">n</script>个数,求能异或出来的最大值和次大值
是谁往BZ上传傻逼题……
高斯消元求线性基,都异或起来是最大值,再异或一下最小的线性基就是次大值
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 100100
using namespace std;
int n,a[M];
void Gauss_Elimination()
{
int i,j,k=0;
for(j=1<<30;j;j>>=1)
{
for(i=k+1;i<=n;i++)
if(a[i]&j)
break;
if(i==n+1) continue;
swap(a[++k],a[i]);
for(i=1;i<=n;i++)
if(i!=k&&a[i]&j)
a[i]^=a[k];
}
n=k;
}
int main()
{
int i;
cin>>n;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
Gauss_Elimination();
int ans=0;
for(i=1;i<=n;i++)
ans^=a[i];
cout<<ans<<' '<<(ans^a[n])<<endl;
return 0;
}