codeforces 思路 我顺着图论的标签点进去的,却没想到-- 可以发现排列内每一个数都是集合里的数异或出来的. 考虑答案的上界是多少.如果能用小于\(2^k\)的数构造出\([0,2^k-1]\)内所有的数,那么答案就对这个\(k\)取\(\max\).很显然这一定是上界. 考虑能不能构造出一组解.把\([1,2^k-1]\)的数拎出来插入线性基里得到一组极大线性无关组,那么显然它的\(size\)就是\(k\).由于它线性无关,所以任意选取一个子集得到的异或和都不会相同,所以考虑把\(0…
虽然做起来有一点裸……但是就是想不到啊…… 首先令 $d_i=p_i\oplus p_{i-1}$,那么 $d_i$ 都是 $S$ 中的数,$a_i=d_i\oplus d_{i-1}\oplus \cdots\oplus d_2$.也就是每个数都能被表示成 $S$ 的某个子集的异或和. 要用 $S$ 表示出 $1$ 到 $2^x-1$ 的所有数(不用考虑 $0$,因为每个数是可以重复用的,可以 $S_i\oplus S_i=0$).怎么求出最大的 $x$? 其实就是建出线性基,然后最小的没有数…
题目描述:输入一个大小为\(n\)的正整数集合\(S\),求最大的\(x\),使得能构造一个\(0\)到\(2^x-1\)的排列\(p\),满足\(p_i\oplus p_{i+1}\in S\) 数据范围:\(n,S_i\le 2^{18}\) 什么?NTF在很多年前就把这东西给切了? 首先要把\(S\)缩成一个大小为\(x\)的线性无关组,而且每个数\(<2^x\),这样就可以构造出\(p\)了.(之后再说) 直接丢进线性基里就可以了吗?不行,应该是把\(<2^x\)的数全部加进去之后,看…
国际惯例的题面:异或凑出一个数,显然是线性基了.显然我们能把区间[l,r]的数全都扔进一个线性基,然后试着插入w,如果能插入,则说明w不能被这些数线性表出,那么就要输出"NO"了.然而怎么得到这个线性基?我们有两种很显然的暴力:线段树和单调莫队.然而亲测它们都不能AC......(不排除我写丑了)考虑思考一下性质:如果我们能对于每个结束位置,用这个位置前面尽可能靠后的数构造出一个线性基,那么我们查询的时候是不是就能取出结束位置为r的线性基限制用的数出现位置不能早于l,然后直接查询就好了…
题意:给定集合,求一个最大的x,使得存在一个0 ~ 2x - 1的排列,满足每相邻的两个数的异或值都在S中出现过.Si <= 2e5 解:若有a,b,c,令S1 = a ^ b, S2 = b ^ c,则有a ^ c = S1 ^ S2 因为有0存在,所以每个数都能表示成它到0路径上的所有间隔的异或和,也就是每个数都能被表示出来.我们用线性基来判断. 找到最大的x之后,我们可以发现,线性基中x个数的2x种选法一一对应这2x个数.于是直接采用格雷码来找这个排列,每加一位,就在x个数中添加 / 删除…
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生.   今Dzy有一魞歄图,其上有N座祭坛,又有M条膴蠁边. 时而Dzy狂WA而怒发冲冠,神力外溢,遂有K条膴蠁边灰飞烟灭. 而后俟其日A50题则又令其复原.(可视为立即复原) 然若有祭坛无法相互到达,Dzy之神力便会大减,于是欲知其是否连通. Input 第一行N,M 接下来M行x,y:表示M条膴蠁边,依次编号 接下来一行Q…
[JLOI2015]装备购买 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1820  Solved: 547[Submit][Status][Discuss] Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示  (1 <= i <= n; 1 <= j <= m),每个装备需要花费 ci,现在脸哥想买一些装备,但是脸哥很穷,所以总是盘…
题目链接 \(Description\) 给定两个长为\(n\)的数组\(x_i,y_i\).每次你可以选定\(i,j\),令\(x_i=x_i\ \mathbb{xor}\ x_j\)(\(i,j\)可以相等).要求若干次操作后使得\(x\)变成\(y\),输出方案.操作次数不能多于\(10^6\),无解输出\(-1\). \(n\leq10^4,\ 0\leq x_i,y_i\leq10^9\). \(Solution\) 考虑异或的两个基本性质: 异或是可逆的,逆运算就是它本身. 可以交换…
XOR Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2302    Accepted Submission(s): 783 Problem Description XOR is a kind of bit operator, we define that as follow: for two binary base number A…
高斯消元 & 线性基 本来说不写了,但还是写点吧 [update 2017-02-18]现在发现真的有好多需要思考的地方,网上很多代码感觉都是错误的,虽然题目通过了 [update 2017-02-19]加入线性基 [update 2017-03-31]完善内容,改用markdown Gauss Elimination 高斯消元(Gaussian elimination)是求解线性方程组的一种算法,它也可用来求矩阵的秩,以及求可逆方阵的逆矩阵. 它通过逐步消除未知数来将原始线性系统转化为另一个更…
LOJ BZOJ 明明做过一道(最初思路)比较类似的题啊,怎么还是一点思路没有. 记所有元素的异或和为\(s\),那么\(x_1+x_2=x_1+x_1\ ^{\wedge}s\). \(s\)是确定的.考虑从高位到低位枚举\(s\)的二进制位.若当前位\(s\)为\(1\),则\(x_1\)是\(0\)是\(1\)贡献相同:否则\(x_1\)这一位必须是\(1\)(如果能是\(1\)).这样可以满足\(x_1+x_2\)最大. 对于\(x_1\)最小的要求,就是在\(s\)为\(1\)时,\(…
题目链接 题意 将序列尽可能分成多段使得任意$x \geq 1$段内的所有元素的异或和大于$0$问最多多少段 思路 首先,如果所有元素异或和等于$0$答案显然为$-1$,否则构造整个序列的线性基,这个线性基的大小就是答案. 代码 #include <bits/stdc++.h> #define DBG(x) cerr << #x << " = " << x << endl; using namespace std; const…
[LOJ#6060]Set(线性基) 题面 LOJ 题解 好题啊QwQ. 首先\(x1\oplus x2=s\)是定值.而\(s\)中假设某一位上是\(1\),则\(x1,x2\)上必定有一个是\(1\),另一个是\(0\),所以对答案没有影响.反过来,如果\(s\)上某一位为\(0\),则要么都是\(0\),要么都是\(1\). 所以我们在考虑构造线性基的时候,优先考虑\(0\)的位,再考虑\(1\)的位. 那么现在只需要令\(x2\)在原本在\(s\)是\(0\)的位置上取到尽可能多的\(1…
题目链接 \(Description\) 给定一张无向带边权图(存在自环和重边).求一条1->n的路径,使得路径经过边的权值的Xor和最大.可重复经过点/边,且边权和计算多次. \(Solution\) 来找一些性质.从一个点出发,到达任意一个点后原路返回,那么得到的和仍为0.但是如果走完一个环后原路返回,则会得到这个环的Xor和. 那么从1点就可以得到任何一个环的Xor和.我们还需要一条1->n的路径,使得搭配上某些环后答案最大.于是我们就可以对环的权值构造线性基,拿路径Xor和在上面求最大…
构造线性基后将其消至对任意位至多只有一个元素该位为1.于是就可以贪心了,将k拆成二进制就好.注意check一下是否能异或出0. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define N 100010 #define l…
高斯消元 其实开始只是想搞下线性基,,,后来发现线性基和高斯消元的关系挺密切就一块儿在这儿写了好了QwQ 先港高斯消元趴? 这个算法并不难理解啊?就会矩阵运算就过去了鸭,,, 算了都专门为此写个题解还是详细港下趴,,, 就每次选定一个未知数,通过加减消元使得所有方程中只有一个方程中它的系数不为0 然后这么一直做下去最后就会得到一个,这样的东西 a是系数b是方程右边的那个玩意儿 然后就输出b/a就成了,,还挺简单的是不是x就模拟了一个加减消元 然后就放代码趴 #include<bits/stdc+…
题意 给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大. \(1≤n≤50,0≤S_i≤2^{50}\) 分析 模板题. 推荐一篇好博客 现在我来证明一下线性基的性质. 性质 这说的线性基是真正的线性基,不是程序里面的. 设线性基的异或集合中不存在0. 这个是个构造,不用证明.数集T本身就是线性基,而它的异或集合中当然存在0. 线性基的异或集合中每个元素的异或方案唯一,其实这个跟性质1是等价的. 如果异或方案有多种,那么这些方案去掉公共部分后异或起来就是0,与性质1矛盾…
题目链接 \(Description\) 给定一张带边权无向图.若存在u->v的一条路径使得经过边的边权异或和为s(边权计算多次),则称(u,v,s)为interesting triple(注意是三元组,不是两元组). 求图中所有interesting triple中s的和. \(Solution\) 同[WC2011]Xor,任意两点路径的Xor和是它们间(任意一条)简单路径的和Xor一些环的和.so可以先处理出环上的和,构造线性基.两点间的一条简单路径可以直接求个到根节点的dis[]. 有了…
k=1的话非常好做,每个有1的位都有一半可能性提供贡献.由组合数的一些性质非常容易证明. k=2的话,平方的式子展开可以发现要计算的是每一对位提供的贡献,于是需要计算每一对位被同时选中的概率.找出所有存在的相互绑定的位,这些位被同时选择的概率为0.5,而不被绑定的则为0.25. 对于k>=3,其实用与k=1,2相同的方法大力讨论也可以做.考虑更优美的做法.有一个性质:集合内数相互异或不影响答案.证明比(bing)较(bu)显(hui)然(xie).于是构造出线性基.可以发现线性基里的元素很少,暴…
题目传送门 幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征. 一些旅行者希望游览 A 国.旅行者计划乘飞机降落在 x 号城市,沿着 x 号城市到 y 号城市之间那条唯一的路径游览,最终从 y 城市起飞离开 A 国.在经过每一座城市时,游览者就会有机会与这座城市的幸运数字拍照,从而将这份幸运保存到自己身上.然而,幸运是不能简单叠加的,这一点游览者也十分清…
题目传送门 最大XOR和路径 格式难调,题面就不放了. 分析: 一道需要深刻理解线性基的题目. 好久没打过线性基的题了,一开始看到这题还是有点蒙逼的,想了几种方法全被否定了.还是看了大佬的题解才会做的. 首先我们能想到,在图中从$1$走到$n$有这么两种情况,一种是一条链直接走到$n$,另一种是先走链然后绕若干个环然后回到链上走到$n$.对于这道题显然我们是要考虑所有的环的(由异或的性质可知). 然后我们又可以发现,如果一条链和一个环中间有一条路径相连,那么我们从链上走到环上时会经过这条路径一次…
题目传送门 线性基 题目描述 给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大. 输入输出格式 输入格式: 第一行一个数n,表示元素个数 接下来一行n个数 输出格式: 仅一行,表示答案. 输入输出样例 输入样例#1: 2 1 1 输出样例#1: 1 说明 $1 \leq n \leq 50, 0 \leq S_i \leq 2 ^ {50}$ 分析: 一道线性基模板.<不会线性基的看这里> 直接构造线性基然后贪心选取异或得到最大答案即可. Code: #include…
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最高位的1在第x位. [就是原集合的任意子集的异或和 与 线性基的任意子集的异或和 完全相等] 2.线性基的构造法: 对每个数p从高位到低位扫,扫到第x位为1时,若ax不存在,则ax=p并结束此数的扫描,否则令p=p xor ax. [高斯消元] 异或版高斯消元后的线性基会变成类似上面的样子(线性基是…
题目链接 题意 给定\(n\)个数,对其每一个子集计算异或和,求第\(k\)小的异或和. 思路 先求得线性基. 同上题,转化为求其线性基的子集的第k小异或和. 结论 记\(n\)个数的线性基为向量组\(B=\{b_0,b_1,b_2,...,b_t\}(有b_i[p_i]=1,p_1\lt p_2\lt ...\lt p_t)\),记\(k\)的二进制表示为向量\(\vec{K}\). 则第\(k\)小异或和为\[\oplus_{\vec{K}[i]=1}b_i\] 即\(k\)的二进制表示中为…
大力观察:I.从输出精准位数的约束来观察,一定会有猫腻,然后仔细想一想,就会发现输出的时候小数点后面不是.5就是没有 II.从最后答案小于2^63可以看出当k大于等于3的时候就可以直接搜索了 期望概率dp:对于k=1的时候,把所有存在的位乘0.5就行了,对于k=2的时候就可以用类似推反演的方法(转换枚举顺序之类的)退出来一个式子,然后你只需要求个概率(很好推,也很好求)就可以啦 线性基:搜索之前还有dp之前预处理用的(只是构造一下) 然而我的做法却是,先求出线性基,再用期望概率dp(类似OSU!…
题目大意: 有一些矿石,每个矿石有一个a和一个b值,要求选出一些矿石,b的和最大且不存在某个矿石子集它们的a的异或和为0. 解题关键:对魔力进行由大到小排序,依次加入线性基,统计即可. #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<cmath> using namespace st…
题目大意:求xor所有值的第k小,线性基模板题. #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<cmath> using namespace std; typedef long long ll; ; ll ],a[],n,m; //构造线性基,也可用来判断x是否存在,最后返回是否等…
[BZOJ3563/3569]DZY Loves Chinese II Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上有N座祭坛,又有M条膴蠁边. 时而Dzy狂WA而怒发冲冠,神力外溢,遂有K条膴蠁边灰飞烟灭. 而后俟其日A50题则又令其复原.(可视为立即复原) 然若有祭坛无法相互到达,Dzy之神力便会大减,于是欲知其是否连通. Input 第…
[题解]魔改版线性基 魔改版线性基解决此类问题. 联系线性空间的性质,我们直接可以构造出这样的基: \[ 100000 \\ 010000 \\ 000010 \\ 000001 \] 使得每个基的最高位是唯一的,我们的目的是要能够保证从上往下一直异或一直变大,所以不能使基出现这样的情况: \[ 100001 \\ 000001 \] 一个不能从上往下一直异或一直变大的例子. 考虑如何构造\(kth\) 大(小),考虑这样的性质,我们记\(a_i\)表示从下往上第\(i\)个基,显然从\(0\)…
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 后手在什么时候能够获胜呢?只有在他能构造出一个子集的异或和为0时(这个应该是nim博弈的结论了吧) 那么为了必胜,我们就要取到没有子集异或和为0为止 那就是构造一个线性无关,那么构造线性基即可 然后还有一个问题就是石子要取得最小,那么就是留下来的要最大,就是被加进线性基中的要最大 考虑贪心,从大到小取石头,如果不能被线性基中的数表示那么就加入线性基,否则这堆石子就要取走 据说贪心的证明得用拟阵,我还是不会 //minamoto #include…