【loj114】k大异或和 线性基+特判】的更多相关文章

题目描述 给由 $n​$ 个数组成的一个可重集 $S​$ ,每次给定一个数 $k​$ ,求一个集合 $T⊆S​$ ,使得集合 $T​$ 在 $S​$ 的所有非空子集的不同的异或和中,其异或和 $T_1\ \text{xor}\ T_2\ \text{xor}\ …\ \text{xor}\ T_{|T|}​$ 是第 $k​$ 小的.求这个第 $k$ 小的异或和. 题解 线性基+特判 板子题没什么好说的,直接求出严格线性基,由于每个最高位只有一个因此按位判断即可. 关键在于一个特判:原来的可重集可…
题目链接 如何求线性基中第K小的异或和?好像不太好做. 如果我们在线性基内部Xor一下,使得从高到低位枚举时,选base[i]一定比不选base[i]大(存在base[i]). 这可以重构一下线性基,从高到低位枚举i,如果base[i]在第j位(j<i)有值,那么Xor一下base[j].(保证每一列只有一个1) 比如 1001(3)与0001(0),同时选0,3只比3要小:重构后是 1000(3)和0001(0),这样同时选0,3比只选0或3都要大. 这样将K二进制分解后就可以直接对应上线性基…
1312 最大异或和 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题   有一个正整数数组S,S中有N个元素,这些元素分别是S[0],S[1],S[2]...,S[N-1].现在你可以通过一个操作来更新数组.操作方法如下: 选择两个不同的数i.j(0<=i,j<N 且 i!=j),先计算A = S[i] xor S[j], B = S[j].然后用A.B替换S[i],S[j],即 S[i]=A , S[j]=B.其中xor表示…
传送门 (vjudge和hdu也有但是我觉得LOJ好看!而且限制少!) 不过本题描述有误,应该是k小. 首先我们需要对线性基进行改造.需要把每一位改造成为,包含最高位的能异或出来的最小的数. 为啥呢?因为如果不满足这个条件的话,那么在之后的异或过程中,大的数反而会被小的数异或的更小. 满足了上述性质之后,我们就能知道,首先高位的1一定比低位的1更能使异或和变大,而低位的1一定能使异或和变大.那么我们先把线性基中所有元素压入栈,之后把k二进制拆分,异或上对应的位置的值即可. #include<io…
Loj 114 k大异或和 构造线性基时有所变化.试图构造一个线性基,使得从高到低位走,异或上一个非 \(0\) 的数,总能变大. 构造时让任意两个 \(bas\) 上有值的 \(i,j\) ,满足 \(bas_i\) 的第 \(j\) 位为 \(0\) ,这样就可以使得从高往低走异或上当前数一定变大. 那么最大的方案就是每一位都异或,第 \(k\) 大的方案只需要根据 \(k\) 的二进制拆分判一下每一位是否异或就可以了. 注意如果这个基底向量组是满秩的,那么 \(0\) 就无法异或出,需让…
[LOJ#114]k 大异或和 试题描述 这是一道模板题. 给由 n 个数组成的一个可重集 S,每次给定一个数 k,求一个集合 T⊆S,使得集合 T 在 S 的所有非空子集的不同的异或和中,其异或和 T1 xor T2 xor … xor T|T| 是第 k 小的. 输入 第一行一个数 n.第二行 n 个数,表示集合 S.第三行一个数 m,表示询问次数.第四行 m 个数,表示每一次询问的 k. 输出 输出 m 行,对应每一次询问的答案,第 k 小的异或和.如果集合 S 的所有非空子集中,不同的异…
二次联通门 : LibreOJ #114. k 大异或和 /* LibreOJ #114. k 大异或和 WA了很多遍 为什么呢... 一开始读入原数的时候写的是for(;N--;) 而重新构造线性基的时候要用到N...所以GG 对于找第k大异或和 只需把原来的线性基重新构造 构造规则为 若i<j, aj的第j位是1,就把aj异或上ai 查询的时候将k二进制拆分,对于1的位,就异或上对应的线性基. 最终得出的答案就是k小值. */ #include <cstring> #include…
构造线性基后将其消至对任意位至多只有一个元素该位为1.于是就可以贪心了,将k拆成二进制就好.注意check一下是否能异或出0. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define N 100010 #define l…
题面 Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 (u, v) 在 G 中, 否则这条边不在 G 中. 现在给定 s 个结点数相同的图 G1...s, 设 S = {G1, G2, . . . , Gs}, 请问 S 有多少个子集的异 或为一个连通图? Input 第一行为一个整数s, 表图的个数. 接下来每一个二进制串, 第 i 行的二进制串为 gi, 其中 gi 是原…
题目描述 定义两个图\(G_1\)与\(G_2\)的异或图为一个图\(G\),其中图\(G\)的每条边在\(G_1\)与\(G_2\)中出现次数和为\(1\). 给你\(m\)个图,问你这\(m\)个图组成的集合有多少个子集的异或图为一个连通图. \(n\leq 10,m\leq 60\) 题解 考虑枚举图的子集划分,让被划分到不同子集的点之间没有连边,而在同一个子集里面的点可以连通,可以不连通. 可以用高斯消元(线性基)得到满足条件的图的个数.设枚举的子集划分有\(k\)个集合,那么容斥系数就…