Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2^S定义为S 所有子集构成的集合. 定义映射 f : 2^S -> Z f(空集) = 0f(T) = XOR A[t] , 对于一切t属于T 现在albus把2^S中每个集合的f值计算出来, 从小到大排成一行, 记为序列B(下标从1开始). 给定一个数, 那么这个数在序列B中第1次出现时的下标是多少呢? Input 第一行一个数n, 为序列A的长度…
Time Limit: 6 Sec  Memory Limit: 128 MBSubmit: 2054  Solved: 850[Submit][Status][Discuss] Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2^S定义为S 所有子 集构成的集合.定义映射 f : 2^S -> Zf(空集) = 0f(T) = XOR A[t] , 对于一切t属于T现在albus把2^S中每个集…
http://www.lydsy.com/JudgeOnline/problem.php?id=2844 题意:给定 n个数,把它的所有子集(可以为空)的异或值从小到大排序得到序列 B,请问 Q 在 B 中第一次出现的下标是多少?保证 Q 在 B 中出现. 如果去除重复数,根据Q的二进制便可以得到答案 现在不去除重复数 结论:每个数都会重复出现2^(n-|β|) 次 证明:摘自https://blog.sengxian.com/algorithms/linear-basis #include<c…
引用题解:http://blog.csdn.net/PoPoQQQ/article/details/39829237 注意评论区. #include<cstdio> using namespace std; #define MOD 10086 #define N 100001 int n,a[N],m,base[32],k,real[32],ans,now; int main() { scanf("%d",&n); for(int i=1;i<=n;++i)…
线性基求可重rank 题目描述 给定 n 个数 $\{ a_i \}$ ,以及数 $x$. 将 $\{ a_i \}$​ 的所有子集(包括空集)的异或值从小到大排序,得到 $\{ b_i \} $. 求 $x$ 在 $\{ b_i \}$ 中第一次出现的下标.保证 $x$ 在 $\{ b_i \}$ 中出现. HINT 数据范围: 1 <= N <= 10,0000 其他所有输入均不超过10^9 题目分析 考虑线性基求rank的过程,是一个求第k大的逆过程.也就是首先对线性基消元,再把线性基的…
CF895C: Square Subsets && [BZOJ2844]albus就是要第一个出场 这两道题很类似,都是线性基的计数问题,解题的核心思想也一样. CF895C Square Subsets 题目链接 题意 给定\(n\)个数,求多少种选数方案使得选出来的数乘积为完全平方数.\(n\leq 100000,a_i\leq70\). 完全平方数的本质就是每个质因子的次数为偶数. 所以我们将每一个数唯一分解,然后记录每个质因子的奇偶状态,就得到了一个个01串.问题就变成了有多少个集…
[BZOJ2844]albus就是要第一个出场 Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2^S定义为S 所有子集构成的集合.定义映射 f : 2^S -> Zf(空集) = 0f(T) = XOR A[t] , 对于一切t属于T现在albus把2^S中每个集合的f值计算出来, 从小到大排成一行, 记为序列B(下标从1开始). 给定一个数, 那么这个数在序列B中第1次出现时的下标是多少呢? I…
2844: albus就是要第一个出场 题意:给定一个n个数的集合S和一个数x,求x在S的$2^n$个子集从小到大的异或和序列中最早出现的位置 一开始看错题了...人家要求的是x第一次出现位置不是第x个是谁 求出线性基后我们知道一共有$2^r$个不同的数,再知道每个数出现了几次就好啦 每个数出现了$2^{n-r}$次....因为有$n-r$个线性相关(高斯消元后全0了)的方程异或不影响.... 然后就简单了,从高到低枚举二进制位,异或这一位后小于k就加上 #include <iostream>…
2844: albus就是要第一个出场 Time Limit: 6 Sec  Memory Limit: 128 MBSubmit: 1134  Solved: 481[Submit][Status][Discuss] Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2^S定义为S 所有子 集构成的集合.定义映射 f : 2^S -> Zf(空集) = 0f(T) = XOR A[t] , 对于一切…
2844: albus就是要第一个出场 链接 分析: 和HDU3949差不多互逆,这里需要加上相同的数. 结论:所有数任意异或,构成的数出现一样的次数,次数为$2^{n-cnt}$,cnt为线性基的大小. 结论:集合中所有异或值为0的集合有$2^{n-cnt}$个(包括空集). 证明及详细过程参考:https://blog.sengxian.com/algorithms/linear-basis,https://blog.csdn.net/jaihk662/article/details/786…
一.题目 albus就是要第一个出场 二.分析 非常有助于理解线性基的一题. 构造线性基$B$后,如果$|A| > |B|$,那么就意味着有些数可以由$B$中的数异或出来,而多的数可以取或者不取,相当于每多一个数,那么线性基能生成的数的子集的种类就可以乘以$2$,最终就是乘以$2^{|A|-|B|}$. 所以对于给定的$Q$,要确定它是由哪些位置的线性基中的数生成的,然后确定它在不重复序列中的位置,然后再乘以$2^{|A|-|B|}$,最终还需要$+1$,因为前面求的其实是不包含这个数的子集总个…
Time Limit: 6 Sec  Memory Limit: 128 MBSubmit: 2254  Solved: 934[Submit][Status][Discuss] Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2^S定义为S 所有子 集构成的集合.定义映射 f : 2^S -> Zf(空集) = 0f(T) = XOR A[t] , 对于一切t属于T现在albus把2^S中每个集…
http://www.lydsy.com/JudgeOnline/problem.php?id=2844 (题目链接) 题意 给出${n}$个数,它们可以异或出${n^2}$个数,将这些数从小到大排列起来,问${Q}$最早出现的位置. Solution 原来线性基还有这种性质,我怎么不知道→_→ 假设${n}$个数可以消出${k}$个线性基,那么显然会有${2^k}$个不同的亦或和,${n}$个数相互排列显然会有${2^n}$个.神奇的事情就在于每种亦或和居然是一样多的,也就是都是${2^{n…
https://www.lydsy.com/JudgeOnline/problem.php?id=2844 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2^S定义为S 所有子集构成的集合.定义映射 f : 2^S -> Zf(空集) = 0f(T) = XOR A[t] (对于一切t属于T)现在albus把2^S中每个集合的f值计算出来, 从小到大排成一行, 记为序列B(下标从1开始). 给定一个数, 那么这个数在序列…
题目大意:给一个集合$S$($1\leq S_i\leq 70$),选择一个非空子集,使它们的乘积等于某个整数的平方的方法的数量. 求方案数,若两种方法选择的元素的索引不同,则认为是不同的方法. 题解:$70$以内的质数只有$19$个,考虑状压$DP$,$f_{i,j}$表示这个数为$i$,若$j$二进制下的第$k$位为$1$,表示它含第$k$个质数奇数个,转移显然 卡点:无 C++ Code: #include <cstdio> #include <cstring> #defin…
洛谷传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 题意: 给你n个数,每个数<=70,问有多少个集合,满足集合中所有数相乘是个完全平方数(空集除外) 题解: 完全看不出这玩意儿和线性基有什么关系……我可能太菜了…… 首先,一个完全平方数分解质因数之后每个质因子都出现偶数次 又因为小于等于$70$的质数总共18个,可以用18位的二进制表示,0表示偶数次,1表示奇数次 那么两个数相乘就是每一个质因子表示的位的异或 那么就是求有多少种方法相乘得0 首先求出原数组的线性基,设$cnt$表示线性基内…
题目大意:给你一个序列,你可以在序列中任选一个子序列,求子序列每一项的积是一个平方数的方案数. 1<=a[i]<=70 因为任何一个大于2的数都可以表示成几个质数的幂的乘积 所以我们预处理70以内的质数,把它作为二进制状压的状态,每个在序列中出现数Hash一下,组合数推一下 所以把奇次幂的状态表示为1,偶次幂的状态就是0,比如6就是11,42就是1011 而平方数的每个质因子的指数都是偶数,所以最终结果的状态就是0000000... 转移的过程,两个数的乘积,就是这两个数的质因子二进制的状态的…
线性基的题- 考虑平方数只和拆解质因子的个数的奇偶性有关系 比如说你 \(4\) 和 \(16\) 的贡献都是一样的.因为 \(4 = 2^2 , 16 = 2^4\) \(2\) 和 \(4\) 奇偶性相同 然后考虑如何线性基,不难想到,二进制可以表示奇偶性, 所以异或和每一位是0的时候就是一个平方数了. 我们考虑把 线性基的元素设为 \(|S|\) 个 那么你手头只剩下 \(n-|S|\) 个数字还可以被线性基表示的. 如果可以表示,那么说明了这些 \(2^{n-|S|}-1\) 个子集异或…
Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2^S定义为S 所有子集构成的集合.定义映射 f : 2^S -> Zf(空集) = 0f(T) = XOR A[t] , 对于一切t属于T现在albus把2^S中每个集合的f值计算出来, 从小到大排成一行, 记为序列B(下标从1开始). 给定一个数, 那么这个数在序列B中第1次出现时的下标是多少呢? Input 第一行一个数n, 为序列A的长度.接下…
LINK 题意:看题目不如看样例解释.给出有n个数的集合,对这些子集中的数求异或,升序统计所有子集得到的数(重复会被计入),询问一个数x,问这个数出现的第一个位置 思路:在这里要求一个所有可能出现的异或值,对于这个要求有个思想和概念很适用这类题——线性基.线代里面学过线性无关组,可用高斯消元解得,在本题中的线性基类似,是能够构造所有出现异或值得线性无关组.总的来说本质思维就是高斯消元. /** @Date : 2017-07-03 10:40:20 * @FileName: bzoj 2844…
[题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i]) swap(a[i],a[j]); if (!a[i]) {k=i-1; break;} D(j,30,0) if (a[i]>>j & 1){ b[i]=j; F(x,1,n) if (x!=i && a[x]>>j&1) a[x]^=a[i];…
高斯消元解XOR方程组 srO  ZYF  Orz 膜拜ZYF…… http://www.cnblogs.com/zyfzyf/p/4232100.html /************************************************************** Problem: 2844 User: Tunix Language: C++ Result: Accepted Time:252 ms Memory:2052 kb ***********************…
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2844 题意: 给出一个长度为n的正整数数列A.每次选出A的一个子集进行抑或(空集抑或值为0),这样就得到一个长度为2^n的数列B.将B中元素升序排序.给出一个数字m,求m的B中出现的最小位置. 思路:首先将数字看做是二进制进行高斯消元,最后得到k个线性无关的数字,那么B中所有数字均可由这k个线性无关的数字得到,可以得到2^k个不同数字,每个数字在B中出现2^(n-k)次.因此,对于m,…
题目大意: 给一个长度为n的序列,将其子集的异或值排序得到B数组,给定一个数字Q,保证Q在B中出现过,询问Q在B中第一次出现的下标. 题解: 感觉和hdu3949第K小异或值有一像,然而发现要求出现次数……emmmm 考虑线性基的性质,即在n个数字中求出其极大线性无关子集,设其长度为m,也就意味着有n-m个元素是可以用这m个元素表示的,考虑假设我们现在用这m个变量表示出了一个数字A,那么给A异或上0还是其本身,考虑剩下的n-m个元素可以凑多少个0,即二项式定理,所以可以知道,对于任意一个可以用线…
题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 给定集合$S$,现在将任意$A\subseteq S$中的元素求异或和,然后存入一个数组中(下标从1开始),然后从小到大排一个序.问$q$第一次出现在$A$中的下标. 我们可以通过线性基得到值域上有多少个异或和比$q$小,现在问题来了,怎么求$q$的下标. 通过打表找规律,以及手动枚举可以发现一个结论. 定理1 设线性基为$B$,那么在$S$的子集的异或和中,出现的异或和的出现的次数是$2^{\left | S \ri…
BZOJ 2844 被NOIP模拟赛题弄自闭了QuQ. 因为本题要求异或,所以自然地构造出线性基,假设本题中给出的数有$n$个,而我们构造出的线性基大小为$m$,那么每一个可以异或出来的数相当于出现了$2^{n - m}$次. 可以把那些已经存在于异或空间中的数看成$0$,因为我们一共能凭凑出$2^m$个不同的异或值,剩下的$n - m$个数相当于可选可不选,所以每一个值有$2^{n - m}$种方案异或上一个$0$. 然后算一算$q$在不重复的异或空间中排第几就可以了,具体做法就是把$q$用二…
题目链接 题意 给定\(n\)个数,将其所有的子集(\(2^n\)个)的异或和按升序排列.给出一个询问\(q\),问\(q\)在该序列中第一次出现位置的下标(下标从\(1\)开始). 题解 结论 记其线性基为\(\mathfrak B\),则每个异或和出现的次数为\(2^{n-|\mathfrak B|}\). 证明 从高斯消元的角度看,将\(n\)个数看作\(n\)个行向量,经行等价变换后得到一个行简化梯形矩阵,非零行的行数为\(|\mathfrak B|\),而下面的\(n-|\mathfr…
传送门 这个题题目描述真怪异--就不能说人话吗-- 人话:给定长为n的序列A,定义f(s)为集合s内所有元素异或值,求A的所有子集的f值从小到大排列后,q在其中第一次出现的下标对10086取模的值. 首先不难想到构建线性基.线性基有一个良好的性质!假设这n个数的线性基中有k的数,那么显然有\(2^k\)种异或值.之后,因为线性基是可以看作线性基中本来有的数再加上一堆0,所以每一种异或值应该出现过\(2^{n-k}\)次. 那么我们只需要求出来q在这一堆异或值中的排名.这个我们可以仿照求第k大的操…
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 线性基居然有这性质我还不知道orz 假设$n$个数的线性基中有$k$个数,那么显然共有$2^k$个不同的异或和,而其中每一个异或和的出现次数都是$2^{n-k}$ 感性理解一下的话……就是不在线性基中的每一个数字都可以被线性基中的数字表示出来从而异或之后为0,那么这些数字都可以看做0, 所以每一个异或和都可以异或上0变成自己,那么0有多少种选法呢?加上空集就是$2^{n-k}$种 然后只要算出$q$之前有多少个数就好了…… 然后这个东西具体怎么…
C. Square Subsets time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Petya was late for the lesson too. The teacher gave him an additional task. For some array a Petya should find the number…