BZOJ 4269 高斯消元求线性基

来源:互联网 发布:战争程序员白濑 编辑:程序博客网 时间:2024/06/17 00:39

思路:
最大: 所有线性基异或一下
次大: 最大的异或一下最小的线性基
搞定~

//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;int n,flag=1,ans,a[100050];int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)scanf("%d",&a[i]);    for(int j,i=1<<30;i;i>>=1){        for(j=flag;j<=n;j++)            if(a[j]&i)break;        if(j==n+1)continue;        swap(a[j],a[flag]);        for(int k=1;k<=n;k++)            if(k!=flag&&(a[k]&i))a[k]^=a[flag];        flag++;    }    for(int i=1;i<=flag;i++)ans=ans^a[i];    printf("%d %d\n",ans,ans^a[flag-1]);}

这里写图片描述

0 0
原创粉丝点击