hdu3949
来源:互联网 发布:劳丽诗开淘宝店的经历 编辑:程序博客网 时间:2024/06/04 08:06
第一次线性基~~~~裸替。。。
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;ll base[70];ll ansbase[70];ll a[10010];int kind = 0;int t, n, q;const ll l = 1;ll sh(ll a, int b){for (int i = 1; i <= b; i++)a /= 2;return a;}void getbase(ll a){bool judge = false;for (int i = 60; i >= 0; i--){ll temp = a >> i;if (temp & 1){if (base[i] == 0){base[i] = a;judge = 1;break;//易错点!!!!}elsea ^= base[i];}}if (!judge)kind = 1;}void clearr(){for (int i = 0; i <= 60; i++){if (base[i] == 0)continue;for (int k = 60; k >= i + 1; k--){ll temp = base[k]>>i;if (temp & 1){base[k] ^= base[i];}}}}ll getans(ll q, ll stdd, int all){if (q>stdd)return -1;if (q == 0)return 0;ll temp = 0;for (int i = 0; i < all; i++){if ((q>>i) & 1){temp ^= ansbase[i];}}return temp;}int main(){scanf("%d", &t);// ll aa=1;//for(int i=1;i<=60;i++)//aa*=2;//cout<<aa<<endl;int k = 1;while (t--){scanf("%d", &n);kind = 0;for (int i = 0; i <= 60; i++)base[i] = 0;for (int i = 1; i <= n; i++)scanf("%I64d", &a[i]), getbase(a[i]);clearr();int all = 0;ll stdd = 1;for (int i = 0; i <= 60; i++)if (base[i]){ansbase[all++] = base[i];}stdd <<= all;stdd -= 1;scanf("%d", &q);printf("Case #%d:\n", k++);for (int i = 1; i <= q; i++){ll que;scanf("%I64d", &que);que -= kind;printf("%I64d\n", getans(que, stdd, all));}}return 0;}
阅读全文
0 0
- hdu3949
- hdu3949
- HDU3949 XOR
- hdu3949:XOR
- 【HDU3949】XOR
- hdu3949 XOR
- hdu3949-高斯消元法的应用
- 【高斯消元应用】hdu3949
- 【HDU3949】XOR 线性基
- [HDU3949]XOR-线性基
- [线性基] HDU3949: XOR
- HDU3949:XOR 高斯消元求线性基+二进制拆分
- 【HDU3949】XOR——线性基
- [HDU3949]XOR(高斯消元求线性基)
- hdu3949 XOR (线性基(高斯消元))
- BZOJ 2844 异或线性基(HDU3949 升级版
- hdu3949 XOR(求所有的异或和的第k小,高斯消元求线性基)
- 剑指offer---把数组排成最小的数
- vs静态编译解决找不到msvcp140.dll问题
- linux安装svn及mysql等软件教程
- 51NOD
- apache的基本使用
- hdu3949
- 最形象的ML入门
- Construct2 初次使用感悟
- C语言strlen函数的3种实现方法
- 最基本的SSM框架
- 文件浏览器
- int和unsigned int的混合运算
- CS 400 Sorting Steps 思维(冒泡轮数)
- 假如时光倒流,我会这么学习Java