hdu 3949 XOR
来源:互联网 发布:linux查看时间戳 编辑:程序博客网 时间:2024/06/06 03:05
高斯消元求线性基,再计数求第k小;
个人感觉这样的线性基可以理解成广义的二进制;
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;const int maxn=10005;ll a[maxn],bin[65],n;int T,m;ll read(){ ll x=0;char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x;}int tot,op;void gauss(){ tot=op=0; for(ll i=bin[60];i;i>>=1){ for(int j=tot+1;j<=n;j++)if(a[j]&i){ swap(a[j],a[++tot]); for(int k=1;k<=n;k++) if((a[k]&i) && k!=tot)a[k]^=a[tot]; break; } } if(tot!=n)op=1;}ll query(ll x){ ll ans=0;x-=op; if(!x)return 0; if(x>=bin[tot])return -1; for(int i=1;i<=tot;i++){ if(x&bin[tot-i])ans^=a[i]; } return ans;}int main(){ bin[0]=1;for(int i=1;i<=60;i++)bin[i]=bin[i-1]<<1; T=read(); for(int cas=1;cas<=T;cas++) { memset(a,0,sizeof(a)); printf("Case #%d:\n",cas); n=read(); for(int i=1;i<=n;i++) a[i]=read(); gauss(); m=read(); while(m--) { int x=read(); printf("%lld\n",query(x)); } } 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 异或
- 【HDU 3949】 XOR|线性基
- [HDU 3949]XOR:线性基
- Hdu 3949 XOR 线性基
- HDU-3949 XOR 线性基
- hdu 3949 Xor (高斯消元解决xor问题)
- XOR HDU
- HDU 3949 XOR (高斯消元求线性基)
- hdu 3949 XOR (高斯消元求线性基)
- HDU 3949 XOR [线性基|高斯消元]【数学】
- HDU 4825 Xor Sum
- Android高德地图API配置
- 布局嵌套其他布局(比如说每个页面的顶部都有同样的控件,那就不要一一去添加,采用此方法)
- linux系统下(x86_64)安装jdk 1.6(jdk-6u45-linux-x64.bin)
- Linux SPI总线和设备驱动架构之一:系统概述
- VMware Fusion 8 Pro
- hdu 3949 XOR
- Fragment用法
- 构造方法
- java语言 flatten(Object[] objs){} 方法
- 【最小表示法】HDU4162Shape Number
- webrtc学习(一)之------关键帧请求
- vtkCommand::GetStringFromEventId()
- 互联网热词
- 新的开始