hdu 3949 Xor (高斯消元解决xor问题)
来源:互联网 发布:免费网站模板源码下载 编辑:程序博客网 时间:2024/06/16 06:30
题目 :http://acm.hdu.edu.cn/showproblem.php?pid=3949
#include<iostream>#include<cstdio>#include<cstring>#include<map>#include<algorithm>#include<cmath>#include<queue>#include<stack>using namespace std;#define M 10010#define inf 1LL<<60#define ll long long#define eps 1e-7#define bas 9#define mod 1000000000LLll a[M];ll bit[61];int n;void gauss(){ int row = 0, col = 60, k; while( col >= 0 && row < n ){ k = row; while( k < n && (a[k]&bit[col]) == 0 ) ++k; if( k == n ){ --col; } else{ swap( a[row], a[k] ); for( int i = 0; i < n; ++i ) if( i-row ){ if( a[i]&bit[col] ) a[i] ^= a[row]; } --col, ++row; } } sort( a, a+n ); n = unique( a, a+n ) - a;}ll cal( int x ){ int i = 0; if( a[0] == 0 ){ if( x == 1 ) return 0; ++i; --x; } ll ans = 0; while( x && i < n ){ if(x&1) ans ^= a[i]; x >>= 1; ++i; } if( x ) return -1; return ans;}int main(){ //freopen( "input.txt", "r", stdin ); //freopen( "output.txt", "w", stdout ); bit[0] = 1; for( int i = 1; i < 61; ++i ) bit[i] = bit[i-1]<<1; int T, q, t = 0, x; scanf( "%d", &T ); while( T-- ){ scanf( "%d", &n ); for( int i = 0; i < n; ++i ) scanf( "%I64d", a+i ); gauss(); printf( "Case #%d:\n", ++t ); scanf( "%d", &q ); while( q-- ){ scanf( "%d", &x ); cout<<cal(x)<<endl; } }}
- hdu 3949 Xor (高斯消元解决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线性基)
- HDU 3949 XOR [线性基|高斯消元]【数学】
- hdu 3949 XOR (高斯消元求线性基)
- XOR HDU
- HDU 3949 XOR 异或
- 【HDU 3949】 XOR|线性基
- [HDU 3949]XOR:线性基
- Hdu 3949 XOR 线性基
- HDU-3949 XOR 线性基
- HDOJ-3949 XOR(高斯消元)
- 程序员买房与程序员转型
- Win32 使HBITMAP显示成透明效果
- 标题全大字 首字大写 全小字
- over air文件传输功能
- 简单xinetd或inetd应用
- hdu 3949 Xor (高斯消元解决xor问题)
- hibernate 一级缓存和二级缓存
- 面向对象
- Windows 7 我的电脑->管理 打不开解决方法
- 进程和线程
- lphlpapi iphelper新增/删除IP地址
- 黑马程序员_java入门_集合对象概述
- 解决Windows 程序界面闪烁问题的一些经验
- 使用静态库时需要注意的事项