[HDU 3949]XOR:线性基
来源:互联网 发布:北京外国语大学网络教 编辑:程序博客网 时间:2024/06/02 07:16
点击这里查看原题
线性基教程https://blog.sengxian.com/algorithms/linear-basis
本题要求第k小的异或和,那么可以将k转为2进制数,对于第i位,如果为1,那么答案异或上g[i]。注意的一点是如果基的元素数小于n,那么存在异或和为0的方案,因此需要将k减1
/*User:SmallLanguage:C++Problem No.:3949*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=1e4+5;int n,q,cnt;ll a[M],b[65];vector<ll> g;ll query(ll k){ if(cnt!=n) k--; if(k>=(1LL<<cnt)) return -1; ll ans=0; for(int i=0;i<cnt;i++) if(k>>i&1) ans^=g[i]; return ans;}void solve(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; memset(b,0,sizeof(b)); for(int i=1;i<=n;i++){ for(int j=63;j>=0;j--){ if(a[i]>>j&1){ if(b[j]) a[i]^=b[j]; else{ b[j]=a[i]; for(int k=j-1;k>=0;k--) if(b[k]&&(b[j]>>k&1)) b[j]^=b[k]; for(int k=j+1;k<=63;k++) if(b[k]>>j&1) b[k]^=b[j]; break; } } } } g.clear(); for(int i=0;i<=63;i++) if(b[i]) g.push_back(b[i]); cnt=g.size(); cin>>q; while(q--){ ll k; cin>>k; cout<<query(k)<<endl; }}int main(){ freopen("data.in","r",stdin);// ios::sync_with_stdio(false); int t; cin>>t; for(int i=1;i<=t;i++){ cout<<"Case #"<<i<<":"<<endl; solve(); } return 0;}
阅读全文
0 0
- 【HDU 3949】 XOR|线性基
- [HDU 3949]XOR:线性基
- Hdu 3949 XOR 线性基
- HDU-3949 XOR 线性基
- HDU 3949 XOR (高斯消元求线性基)
- hdu 3949 XOR (高斯消元求线性基)
- HDU 3949 XOR [线性基|高斯消元]【数学】
- [高斯消元 线性基 二进制拆分] HDU 3949 XOR
- HDOJ 3949 XOR (高斯消元 + XOR线性基)
- hduoj 3949: XOR(线性基)
- 【HDU3949】XOR 线性基
- [HDU3949]XOR-线性基
- [线性基] HDU3949: XOR
- bzoj2115 Xor dfs&线性基
- 2115: [Wc2011] Xor 线性基
- 线性基 bzoj2115 [Wc2011] Xor
- bzoj2460(xor线性基)
- [BZOJ]2115 Xor 线性基
- 记录几个常用shell命令和工具(待继续学习添加)
- Android中使用列表画表格(可动态添加行数据)
- Unity学习笔记
- awk笔记
- Android 7.0 行为变更 通过FileProvider在应用间共享文件
- [HDU 3949]XOR:线性基
- as中配置svn,上传代码到svn服务器
- 给初学者的RxJava2.0教程(一)
- node.js简单操作redis
- 译:Ruby小技巧:Each with object
- Excel35招必学秘技
- ②NuPlayer播放框架之ALooper-AHandler-AMessage底层机制分析
- Linux网络流媒体服务器的核心代码揭秘
- 给初学者的RxJava2.0教程(二)