【题目分析】

异或空间的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 ——线形基 高斯消元的更多相关文章

  1. HDU 3949 XOR [线性基|高斯消元]

    目录 题目链接 题解 代码 题目链接 HDU 3949 XOR 题解 hdu3949XOR 搞死消元找到一组线性无关组 消出对角矩阵后 对于k二进制拆分 对于每列只有有一个1的,显然可以用k的二进制数 ...

  2. [bzoj 2844]线性基+高斯消元

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2844 又用到线性基+高斯消元的套路题了,因为经过高斯消元以后的线性基有非常好的序关系,所以 ...

  3. [hdu 3949]线性基+高斯消元

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 一开始给做出来的线性基wa了很久,最后加了一步高斯消元就过了. 之所以可以这样做,证明如下. 首 ...

  4. 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基

    题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...

  5. 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\ ...

  6. HDU 5755 Gambler Bo(高斯消元)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5755 [题目大意] 一个n*m由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对 ...

  7. BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )

    一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...

  8. BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]

    2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...

  9. 【题解】 bzoj1923: [Sdoi2010]外星千足虫 (线性基/高斯消元)

    bzoj1923,戳我戳我 Solution: 这个高斯消元/线性基很好看出来,主要是判断在第K 次统计结束后就可以确定唯一解的地方和\(bitset\)的骚操作 (我用的线性基)判断位置,我们可以每 ...

随机推荐

  1. Yslow使用方法

    Yslow是雅虎开发的基于网页性能分析浏览器插件,从年初我使用了YSlow后,改变了博客模板大量冗余代码,不仅提升了网页的打开速度,这款插件还帮助我分析了不少其他网站的代码,之前我还特意写了提高网站速 ...

  2. Struts2标签<s:checkboxlist>回显问题

    Struts2 checkboxlist回显问题中,说明两种方式,第一种方式很普遍,第二种则是个人根据现有资源加上尝试得来的成果,第二种主要是为个人笔记(其中相关知识点不一一介绍). 一.普通方法: ...

  3. Spring MVC异常统一处理(包括普通请求异常以及ajax请求异常)

    通常SpringMVC对异常的配置都是返回某个jsp视图给用户,但是通过ajax方式发起请求,即使发生异常,前台也无法获得任何异常提示信息.因此需要对异常进行统一的处理,对于普通请求以及ajax请求的 ...

  4. springMVC中ajax和后台数据格式错误

    前台ajax: $.ajax("${pageContext.request.contextPath}/hello",// 发送请求的URL字符串. { dataType : &qu ...

  5. GP SQL 优化

    1.收集统计信息vacuum full analyze ZCXT.ZCOT_PS_PROJECT; 2.检查表的数据量分布select gp_segment_id,count(*) from fact ...

  6. (五)mybatis之下载与基本构成

    1.  下载MyBatis. 输入网址:https://github.com/mybatis/mybatis-3/releases 进入Mybatis下载页面,选择第一个选项,然后就可以加载到myba ...

  7. CAD命令标志

    CAD命令标志 主标识:(常用的)ACRX_CMD_MODAL 在别的命令执行的时候该命令不会在其中执行.ACRX_CMD_TRANSPARENT 命令可以再其它命令中执行,但在该标志下ads_sss ...

  8. C#编写高并发数据库控制

    往往大数据量,高并发时, 瓶颈都在数据库上, 好多人都说用数据库的复制,发布, 读写分离等技术, 但主从数据库之间同步时间有延迟.代码的作用在于保证在上端缓存服务失效(一般来说概率比较低)时,形成倒瓶 ...

  9. Burpsuite1.7.03网站渗透神器最新破解版

    众所周知,Burp Suite是响当当的web应用程序渗透测试集成平台.从应用程序攻击表面的最初映射和分析, 到寻找和利用安全漏洞等过程,所有工具为支持整体测试程序而无缝地在一起工作. 平台中所有工具 ...

  10. CPP-网络/通信:POST

    BOOL PostSubmit(CString strUrl,const CString&strPara, CString&strContent){ BOOL bRet=FALSE; ...