码迷,mamicode.com
首页 > 其他好文 > 详细

异或空间求基(模板)——hdu3949

时间:2019-07-19 18:58:26      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:break   hdu   c++   code   mes   while   bre   ase   size   

输出样例有点问题的。。

#include<bits/stdc++.h>
using namespace std;
#define ll unsigned long long
#define maxn 10005
ll n,a[maxn],zero,size;

void gauss(){
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++)
            if(a[j]>a[i])swap(a[i],a[j]);
            
        if(a[i]==0){zero=1;size=i-1;return;}
        
        for(int k=63;k>=0;k--)
            if(a[i] & (1ull<<k)){
                for(int j=1;j<=n;j++)
                    if(j!=i && (a[j] & (1ull<<k)))
                        a[j]^=a[i];
                break;//消完最高元后就可以退出了 
            }
    }
}

int main(){
    int t,tt;cin>>t;
    for(int tt=1;tt<=t;tt++){

        printf("Case #%d:\n",tt);
        
        cin>>n;        zero=0;size=n; 
        for(int i=1;i<=n;i++)cin>>a[i];
        gauss();
        
        int q;cin>>q;
        while(q--){
            ll k,ans=0;
            cin>>k;
            if(zero)k--;
            if(k>= (1llu<<size)){puts("-1");continue;}
            for(int i=size-1;i>=0;i--)
                if(k & (1llu<<i))
                        ans^=a[size-i];
            cout<<ans<<\n;
        }
    }
}
 

 

异或空间求基(模板)——hdu3949

标签:break   hdu   c++   code   mes   while   bre   ase   size   

原文地址:https://www.cnblogs.com/zsben991126/p/11215010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!