随笔分类 - 数学--线性基
摘要:"传送门" 解题思路 首先最大值很好求,直接造出来线性基贪心即可。次大值的话就枚举哪一位跟最大值不同,然后异或上即可。 代码 cpp include include include include using namespace std; const int N=100005; inline int
阅读全文
摘要:"传送门" 解题思路 异或最大值肯定线性基了,树上两点那么就倍增搞一搞,就维护每个点到各级祖先的线性基,时间复杂度$O(nlog^3n)$,并不知道咋过去的。 代码 cpp include include include include include include using namespace
阅读全文
摘要:"传送门" 解题思路 首先构造出一个生成树,考虑不连接的情况。假设连通两点的非树边和树边都断掉后不连通,那么可以给所有的非树边随机一个互不相同的值,然后树边的权值为过他两端点的非树边权值的异或和,这个可以用一个类似树上差分的东西来实现。询问的时候把所有询问的边权加到线性基里,看是否某个数字能被线性表
阅读全文
摘要:解题思路 $nim$游戏先手必胜的条件是异或和不为$0$,也就是说第一个人拿走了若干堆后不管第二个人怎么拿都不能将剩余堆的异或和变成$0$。考虑线性基,其实就是每个数对线性基都有贡献,任何一个数不会被线性表出,要使拿走元素最少,考虑贪心,将所有数字从大到小依次尝试插入线性基,插入失败就累计到答案。
阅读全文
摘要:"传送门" 解题思路 题意好绕。。大概意思就是找$k$的排名,元素可重复。考虑线性基,假设$n$个数构成$s$个基,那么剩余的$n s$个元素一定会被这$s$个基线性表出,所以它们可以选与不选,所以每个元素有$2^{n s}$种取法。然后算出不重复时$k 1$的排名,再乘上$2^{n s}$,$+1
阅读全文
摘要:"传送门" 解题思路 首先构造出线性基,需要对线性基进行改造,就是让$0$~$63$中的每一位只存在于其对应线性基上,也就是高斯消元的过程。这样的话把线性基有值的位拿出,求第$k$小,就是若$k$二进制中第$i$位存在,就使答案异或上线性基中第$i$小。注意$0$的判断。 代码 cpp includ
阅读全文
摘要:题面解题思路因为异或一个数两次相当于这个数不变,思考可能经过的路径,分为两部分,一部分是简单路径,就是直接到n的路径,还有就是环,如果这个环与简单路径间接相连,我们可以直接把环的贡献异或,因为可以先到环转一圈回去,中间的路径经过两次相当于没经过。考虑到状态比...
阅读全文
摘要:题面解题思路线性基,是构造出一组数:ax,ax-1….a1,ax的二进制最高位为x。这些数字能异或和可以表示原来所有数的异或和。其实相当于一个高斯消元的过程。所以我们按位枚举,如果这一位曾经没数,就直接加入,如果有数,我们就让这两个数异或起来,进而继续表示其...
阅读全文

浙公网安备 33010602011771号