HDU 3949 异或线性基
来源:互联网 发布:刻录软件nero免费下载 编辑:程序博客网 时间:2024/06/02 01:28
题目链接
题意:
有
思路:
首先构建出这
假设非零线性基共有
因为第
这样的话,线性基的线性组合大小排序很类似于二进制的大小排序,比如:
故可考虑对
故对于
但这样并没有包括
所以可以特判一下,若
故此题得解。
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;const int A = 1e4 + 10;ll a[A],b[110],c[A];int n,zero,tot;void init(){ zero = tot = 0; memset(b,0,sizeof(b)); for(int i=1 ;i<=n ;i++) for(int j=62 ;j>=0 ;j--){ if((a[i]>>j)&1){ if(b[j]) a[i] ^= b[j]; else{ b[j] = a[i];tot++; 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<=62;k++) if(((b[k]>>j)&1)) b[k] ^= b[j]; break; } } } zero = (tot<n);tot = 0; for(int i=0 ;i<=62 ;i++) if(b[i]) c[tot++] = b[i];}ll solve(ll k){ if(zero) k--; if(k >= (1LL<<tot)) return -1; ll ans = 0; for(int i=0 ;i<=62 ;i++) if((k>>i)&1) ans ^= c[i]; return ans;}int main(){ int T,_=1;scanf("%d",&T); while(T--){ scanf("%d",&n); for(int i=1 ;i<=n ;i++) scanf("%I64d",&a[i]); init(); int q;scanf("%d",&q); printf("Case #%d:\n",_++); while(q--){ ll k;scanf("%I64d",&k); printf("%I64d\n",solve(k)); } } return 0;}
阅读全文
0 0
- HDU 3949 异或线性基
- hdu 3949(线性基模版) 异或和中第k小的数
- bzoj2115 线性基 异或
- 【HDU 3949】 XOR|线性基
- [HDU 3949]XOR:线性基
- Hdu 3949 XOR 线性基
- HDU-3949 XOR 线性基
- SGU 275 异或线性基
- HDU 3949 XOR (高斯消元求线性基)
- hdu 3949 XOR (高斯消元求线性基)
- HDU 3949 XOR [线性基|高斯消元]【数学】
- hdu 3949 (线性基学习)
- HDU 3949 XOR 异或
- 【BZOJ2115】【Wc2011】 Xor 线性基 异或最长路
- 图的异或 dfs树+线性基
- 【GDOI2018模拟8.7】图的异或 线性基
- 【jzoj5239】【GDOI2018模拟8.7】【图的异或】【线性基】
- BZOJ 2115 异或线性基+DFS找环
- http: server gave HTTP response to HTTPS client 错误
- 解决Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly
- Eclipse上安装springsource-tool-suite
- docker(三)容器
- NodeJS 的一些小细节
- HDU 3949 异或线性基
- OpenGL的三个事件方法 如:openGLController_OpenGLDraw
- linux ./configure 的参数详解
- PHP结合Linux的cron命令实现定时任务
- python爬虫入门教程(一):开始爬虫前的准备工作
- 33:计算分数加减表达式的值
- javascript中this的指向
- 【安全牛学习笔记】实验环境
- TS流相关问题