HDU 3949 XOR ——线形基 高斯消元
【题目分析】
异或空间的K小值。
高斯消元和动态维护线形基两种方法都试了试。
动态维护更好些,也更快(QAQ,我要高斯消元有何用)
高斯消元可以用来开拓视野。
注意0和-1的情况
【代码】
高斯消元
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 10005
#define ll long long
#define F(i,j,k) for (ll i=j;i<=k;++i)
#define D(i,j,k) for (ll i=j;i>=k;--i) void Finout()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
#endif
} inline 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 T,n,m,tot,zero;
ll bin[65],a[maxn]; void gauss()
{
tot=zero=0;
for (ll i=bin[60];i;i>>=1)
{
int j=tot+1;
while (!(i&a[j])&&j<=n) j++;
if (j==n+1) continue;
tot++;
swap(a[tot],a[j]);
F(k,1,n)
if (k!=tot&&(a[k]&i))
a[k]^=a[tot];
}
if (tot!=n) zero=1;
} ll query(ll x)
{
ll sum=0; x-=zero;
if (!x) return 0;
if (x>=bin[tot]) return -1;
F(i,1,tot) if (x&bin[tot-i]) sum^=a[i];
return sum;
} int main()
{
Finout();
bin[0]=1;F(i,1,60) bin[i]=bin[i-1]<<1;
T=read();
F(z,1,T)
{
memset(a,0,sizeof a);
printf("Case #%d:\n",z);
n=read(); F(i,1,n) a[i]=read();
gauss();
m=read();
while (m--)
{
int x=read();
printf("%lld\n",query(x));
}
}
}
动态维护线形基
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define ll long long
#define F(i,j,k) for (ll i=j;i<=k;++i)
#define D(i,j,k) for (ll i=j;i>=k;--i) void Finout()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
#endif
} ll Getll()
{
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;
} ll T,Q,n,x,tab,kas=0;;
ll a[10001],lb[70],rk; bool cmp(ll x,ll y)
{return x>y;}
bool cmp2(ll x,ll y)
{return x<y;} int main()
{
scanf("%lld",&T);
while (T--)
{
printf("Case #%lld:\n",++kas);
tab=1;
ll flag=0,cnt=0;
memset(lb,0,sizeof lb);
scanf("%lld",&n);
F(i,1,n) scanf("%lld",&a[i]);
F(i,1,n)
{
D(j,63,0)
if ((a[i]>>j)&1){
if (lb[j]) a[i]^=lb[j];
else
{
cnt++;
lb[j]=a[i];
F(k,0,62)
F(r,k+1,63)
if ((lb[r]>>k)&1)
lb[r]^=lb[k];
break;
}
}
if (!a[i]) flag=1;
}
cnt=0;
for (int i=0;i<=63;++i)
{
if (lb[i]) lb[cnt++]=lb[i];
}
scanf("%lld",&Q);
F(i,1,Q)
{
scanf("%lld",&rk); rk-=flag; ll sum=0;
if (rk>>cnt) printf("-1\n");
else
{
F(j,0,cnt-1) if ((rk>>j)&1) sum^=lb[j];
printf("%lld\n",sum);
}
}
}
}
HDU 3949 XOR ——线形基 高斯消元的更多相关文章
- HDU 3949 XOR [线性基|高斯消元]
目录 题目链接 题解 代码 题目链接 HDU 3949 XOR 题解 hdu3949XOR 搞死消元找到一组线性无关组 消出对角矩阵后 对于k二进制拆分 对于每列只有有一个1的,显然可以用k的二进制数 ...
- [bzoj 2844]线性基+高斯消元
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2844 又用到线性基+高斯消元的套路题了,因为经过高斯消元以后的线性基有非常好的序关系,所以 ...
- [hdu 3949]线性基+高斯消元
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 一开始给做出来的线性基wa了很久,最后加了一步高斯消元就过了. 之所以可以这样做,证明如下. 首 ...
- 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...
- Codeforces.472F.Design Tutorial: Change the Goal(构造 线性基 高斯消元)
题目链接 \(Description\) 给定两个长为\(n\)的数组\(x_i,y_i\).每次你可以选定\(i,j\),令\(x_i=x_i\ \mathbb{xor}\ x_j\)(\(i,j\ ...
- HDU 5755 Gambler Bo(高斯消元)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5755 [题目大意] 一个n*m由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对 ...
- BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )
一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...
- BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]
2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...
- 【题解】 bzoj1923: [Sdoi2010]外星千足虫 (线性基/高斯消元)
bzoj1923,戳我戳我 Solution: 这个高斯消元/线性基很好看出来,主要是判断在第K 次统计结束后就可以确定唯一解的地方和\(bitset\)的骚操作 (我用的线性基)判断位置,我们可以每 ...
随机推荐
- DVWA之Brute Force教程
---恢复内容开始--- Brute Force暴力破解模块,是指黑客密码字典,使用穷举的方法猜出用户的口令,是一种广泛的攻击手法. LOW low级别的漏洞利用过程 1.使用burp suite工具 ...
- xp密钥
Windows XP 专业版 : CCC64-69Q48-Y3KWW-8V9GV-TVKRM
- -bash: mail: command not found
近日,安装了一个最小化的centos 6.3 6,用mail发送邮件进行测试的时候提示-bash: mail: command not found mailx没有安装,于是: yum -y insta ...
- TFS数据库分离附加经验总结
因TFS数据库已经100多G,所在的服务器D盘已没有空间满足tfs数据库的增长速度,故必须分离复制到其它盘.在分离过程中,先后分离了ReportServer.ReportServerTempDB.Tf ...
- 【Web应用-Kudu】Kudu 管理和诊断 azure web 应用
Azure Kudu是 GitHub 上的一个开源项目,Kudu 站点 (也称为网站控制管理 SCM) 提供了一系列的在线工具,可以帮助用户查看 web 应用的设置,诊断 web 应用,以及安装 w ...
- explian使用介绍
1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有:A:simple:表示 ...
- webpack前端构建工具学习总结(四)之自动化生成项目中的html页面
接续上文:webpack前端构建工具学习总结(三)之webpack.config.js配置文件 插件的介绍文档:https://www.npmjs.com/package/html-webpack-p ...
- 编译驱动链接到了Kernel32库问题
最近开始学习驱动编程,根据网上的配置方法配置了驱动开发环境,用了一个简单的例子测试发现驱动居然链接到了kerner32库里面去了如图 : 显然是把Kernel.lib添加到了附加依赖库 如图 : 去掉 ...
- fclose - 关闭流
SYNOPSIS 总览 #include <stdio.h> int fclose(FILE *stream); DESCRIPTION 描述 函数 fclose 将名为 stream 的 ...
- javaEE(3)_servlet基础
一.Servlet简介 1.Servlet是sun公司提供的一门用于开发动态web资源的技术,Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序 ...