【BZOJ 4269】再见Xor 线性基

来源:互联网 发布:Linux 日志切割 编辑:程序博客网 时间:2024/05/21 05:43

首先构造线性基求出最大的异或值,然后再用最大的异或值异或最小的线性基就是次大值。线性基这玩意比较好玩但是很迷,证明还是简单就不说了。

#include<cstdio>#include<cstring>#include<iostream>using namespace std;int n,a[100021],ins[35],ans;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=31;j>=0;j--)if((a[i]>>j)&1){if(!ins[j]){ins[j]=a[i];break;}else a[i]^=ins[j];}}for(int i=31;i>=0;i--)ans=max(ans,ans^ins[i]);cout<<ans<<" ";for(int i=0;i<=31;i++)if(ins[i]){ans^=ins[i];cout<<ans;break;}return 0;}



0 0
原创粉丝点击