然后考虑如何线性基,不难想到,二进制可以表示奇偶性, 所以异或和每一位是0的时候就是一个平方数了。 我们考虑把 线性基的元素设为|S||S|个 那么你手头只剩下n−|S|n−|S|个数字还可以被线性基表示的。 如果可以表示,那么说明了这些2n−|S|−12n−|S|−1个子集异或和都可以和线性基拼凑成0 所...
所以把线性基内的数除去,剩下的数的所有子集都能与线性基内的数异或成0 那么答案就是真子集个数 1//minamoto2#include<iostream>3#include<cstdio>4usingnamespacestd;5#definegetc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)6charbuf[1<<21],*p1=buf,*p2=buf;...
通过线性基中元素xor出的数的值域与原来的数xor出数的值域相同。 但同时它这组数的大小只有原集合最大数的二进制位那麽多 (60 多位), 线性基与原集合关于异或作用一样,但是他是最简的,好像线性代数里面叫做 基。 构造 求线性基时将一个数的二进制位看成一个向量。假定原集合为 数组,线性基为 对于每个 ,按...
#include<iostream> #include<vector> #include #include<queue> #include<set> #include<ctime> #include<cstring> #include<cstdlib> #include<math.h> usingnamespacestd; typedeflonglongll; constintN=1005; constintmaxn=1e6+5; pair<int,int>p; lla[65],d[65]; voidInsert(llx)//构造线性基 { f...
CF895C dp/线性基 链接:点击打开链接 题意:n个数,选子集乘积之和是完全平方数的子集个数 思路:首先题目中ai非常小,显然可以状态压缩因子把问题转化成异或和为0的方案数字。 在此基础上可以DP解决或者使用线性基 DP方法 用dp[i][j]表示i次插入时异或和为j的方案数,我们可以想到插入一个新数字就是 dp[i-1...
线性基思想+贪心——cf1249C /* 1+3+9+...+3^n<3^(n+1),按这个思路贪心一下就好 */ #include<bits/stdc++.h>usingnamespacestd;#definell long longll p[100],flag[40],s[100];intmain(){ p[0]=s[0]=1;for(inti=1;i<=39;i++)...
【HDU3949】XOR-异或线性基 测试地址:XOR 题目大意:给定nn个正整数,它的每个子集(除空集外)都有一个异或和,求这些异或和中严格第kk小的值。 做法:本题需要用到异或线性基。 首先我们求出线性基,然后每种异或和对于这个线性基都有唯一的组合方式,而根据线性基的性质,它们的最高位肯定各不相同,并且没有任何一个...
A xor C=B 所有把B换成C不影响结果。。。 让我们弄出所有线性基。。这样做的好处是最高位为1的只有1个 贪心Xor 吧... #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<functional> #include<cmath> #...
一个挺好理解的结论。每个线性基中存在的数在任意子集里出现概率都是一半,互不干扰。 毕竟是结论,上自己八百年前的博客。 线性基,从高到底查个排名。 View Code 幸运数字: Description:Description: A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一。每座城市都有一个幸运数...
albus就是要第一个出场:线性基 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2^S定义为S 所有子集构成的集合。 定义映射 f : 2^S -> Z f(空集) = 0 f(T) = XOR A[t](异或和) 对于一切t属于T现在albus把2^S中每个集合的f值计算出来, 从小...