【题目分析】

异或空间的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. CPU性能的评价

    人们通常用benchmark 来衡量CPU的性能,常见的benchmark有dhrystone和coremark. 由于dhrystone 受编译器影响比较大,所以,结果不是很准确,现在大多采用cor ...

  2. 洛谷 P2922 [USACO08DEC]秘密消息Secret Message

    题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret bin ...

  3. libxml2.dylb 导致<libxml/tree.h> 老是找不到头文件

    添加了libxml2.dylb的framework ,结果还是引用不了<libxml/tree.h>,  老是提示找不到头文件. 这个问题其实比较容易解决,但是XCode的版本问题确实让开 ...

  4. Java数据结构和算法(五)--希尔排序和快速排序

    在前面复习了三个简单排序Java数据结构和算法(三)--三大排序--冒泡.选择.插入排序,属于算法的基础,但是效率是偏低的,所以现在 学习高级排序 插入排序存在的问题: 插入排序在逻辑把数据分为两部分 ...

  5. 美国司法部解禁guns打印技术

    今日导读 你知道什么是 3D 打印吗?简单的说,只要有一张设计蓝图和适当的材料,就可以快速打印出实体物件.而最近据外媒报道,从今年 8 月 1 日起,在美国,拥有或公布枪支 3D 打印蓝图的行为都将属 ...

  6. springboot-i18n国际化

    简介 In computing, internationalization and localization are means of adapting computer software to di ...

  7. iPhone Scrollbars with iScroll

    Since we've had web browsers and JavaScript, we've been intent on replacing native browser functiona ...

  8. EXTJS中文乱码

    在<head>中加入 <meta http-equiv="Content-Type" content="text/html; charset=GB231 ...

  9. 设置section的距离

    在ios7中使用group类型的tableview时,第一个section距离navigationbar的距离很大,不符合这边的设计图.使用 myTableView . sectionHeaderHe ...

  10. ios之UIPopoverController

    UIPopoverController是iPad上的iOS开发会常用到的一个组件(在iPhone设备上不允许使用),这个组件上手很简单,因为他的显示方法很少,而且参数简单,但我在使用过程中还常碰到各种 ...