您的位置:首页 > 其它

BZOJ 4269 再见Xor

2016-06-05 15:30 302 查看
线性基。

求次大值就是再异或一个线性基好了。

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100050
using namespace std;
int n,a[maxn],ins[maxn];
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
for (int i=1;i<=n;i++)
{
for (int j=30;j>=0;j--)
{
if (a[i]&(1<<j))
{
if (!ins[j])
{
ins[j]=a[i];
break;
}
else a[i]^=ins[j];
}
}
}
int ans1=0,ans2=0;
for (int i=30;i>=0;i--)
if ((ans1^ins[i])>ans1)
ans1^=ins[i];
for (int i=30;i>=0;i--)
if ((ans1^ins[i])<ans1)
ans2=max(ans2,(ans1^ins[i]));
printf("%d %d\n",ans1,ans2);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: