首页 > TAG信息列表 > fwt
8.10
ABC232G 题意: 给定\(n\)个点和两个序列\(A,B\)和模数\(m\) 从\(i\)号点走到\(j\)号点的代价是\((A_i+B_j)\%m\) 问从\(1\)走到\(n\)号点的最小代价是多少 \(n\leq 2*10^5,m\leq 10^9,0\leq A_i,B_i<m\) 题解: 连边点\(i\rightarrow m-A_i,B_i\rightarrow i\)边权为\(0\) 然后对每个位运算卷积与快速沃尔什变换
我们要快速计算一类形如 \[c_i=\sum_{j\oplus k=i} a_jb_k \]的问题,其中 \(\oplus\) 是 \(\operatorname{bitand},\operatorname{bitor},\operatorname{xor}\) 之一。 And 卷积 / Or 卷积 对于下标范围是 \([0,2^n-1]\) 的数列 \(a\),设 \[\mathrm{FMT}(a)_i=\sum_{j\operatorname{【luogu P3175】按位或(min-max容斥)(高维前缀和 / FWT)
按位或 题目链接:luogu P3175 题目大意 有一个数 0 你一开始,然后每次你可以与上一个数 0~2^n-1 中的,每个数有它被你选择的概率。 然后问你期望要弄多少次才能使得这个数变成 2^n-1。 思路 首先这个弄成 \(2^n-1\) 显然不好弄,我们考虑一个神奇的东西,就是 min-max 容斥。 因为这个 \(2022.6.28
SP26017 GCDMAT - GCD OF MATRIX 比较傻逼的题目,显然答案等于 \[\large sum_{d=1}^n \varphi_d \times \lfloor \frac n d \rfloor \times \lfloor \frac m d \rfloor \]容斥+整除分块即可。 SP26045 GCDMAT2 - GCD OF MATRIX (hard) 和上题相同,不过数据范围变大了,要卡常(FWT
简介 大概是解决形如要求 \(c_i=\sum_{j\bigoplus k=i} A_jB_k\) 这个符号可以是 或,与,异或 整个的流程和 FFT 很像,先正变换成 \(FWT(A),FWT(B)\) ,然后将两者相乘,最后再逆变换 具体的证明和定义和一些繁杂的过程这里就不说了,直接上结论 因为我们是形如 FFT 的分治运算,所【luogu CF1119H】Triple(FWT)
Triple 题目链接:luogu CF1119H 题目大意 给你 n 个数组,每个数组有 n 个数,其中有 x 个 ai,y 个 bi,z 个 ci。 x,y,z 是每个数组都一样,而 ai,bi,ci 每个数组不一样。 然后问你对于每个 i,从每个数组中选一个数,它们的异或和是 i 的情况有多少种。 思路 考虑弄一个类似每个数组的生成函数UOJ#310-[UNR #2]黎明前的巧克力【FWT】
1# 正题 题目链接:https://uoj.ac/problem/310 题目大意 给出一个长度为\(n\)的序列,求有多少种方案找出两个集合\(S,T\)使得这两个集合的异或和相等。 \(1\leq n\leq 10^6\) 解题思路 可以转换为找到一个异或和为\(0\)的集合\(S\),产生\(2^{|S|}\)的方案数。 然后考虑\(FWT\),那么康托展开
https://www.luogu.com.cn/problem/P5367 给定一个全排列,求出它是 1 ~ \(n\) 所有全排列的第几个,答案对 998244353 取模。 答案就是 \(\sum_{i = 1}^{n} res_{a_i} (n - i)!\)。\(res_x\) 表示剩下的比 \(x\) 小的数字的数量,通过树状数组处理。 代码: #include <bits/stdc++.h> usiFWT 学习笔记
快速沃尔什变换(FWT)学习笔记 What 这是啥呀 \(~~~~\) 快速沃尔什变换也用于解决一些卷积问题,所不同的是它解决的卷积的下标一般由位运算代替加法,因此也可以用集合卷积来表示其所能解决的问题。 \(~~~~\) 才疏学浅,理解不深,仅能至此。 How 怎么做 \(~~~~\) 显然暴力卷积复杂度会飞天,省选模拟赛(V)
冲刺国赛5月2日第二场 \(t1\) 沉迷前缀和无法自拔,觉得扫描线是离散位置修改不好操作,没想到其实有零的情况只多了一点点 \(t2\) 在想回滚莫队,但是撤回操作不会很好地处理,并没有领会随机的意图…… \(t3\) 来者不善又是 \(FWT\)…… A. a 以 \(i\) 为右端点的最远左端点可以递推出FWT 学习笔记
类似 FFT 地,FWT 也有这样的代码实现: inline int add(int x){return x>=mod?x-mod:x;} inline int sub(int x){return x<0?x+mod:x;} inline void fwt(int *f,int len,int flg){ for(int i=1;i<len;i<<=1) for(int j=0;j<len;j+=i+i) for(int k=j;k<j+i;k++){快速沃尔什变换(FWT)
快速沃尔什变换 解决什么问题? 回顾之前学过的快速傅里叶变换,能在 \(O(n\log n)\) 的时间复杂度内计算下面这个卷积式: \[C[k] = \sum_{i+j=k}A[i]\times B[j] \]而快速沃尔什变换解决的问题与上式略有不同: \[C[k] = \sum_{i\bigoplus j = k} A[i]\times B[j] \]其中,\(\bigoplus\)[cf1336E]Chiori and Doll Picking
将所有$a_{i}$在二进制下展开,得到一个$n\times m$的01矩阵 对该矩阵做高斯消元(显然不影响结果),并要求得到如下的形式$$\left|\begin{array}{ll}1&0&0&\cdots&0&\cdots\\0&1&0&\cdots&0&\cdots\\0&0&1&\cdots&0&\cdots\\\vdots&\vdot【笔记】快速莫比乌斯/沃尔什变换 (FMT/FWT)
在看懂之前看大家就写了下面三个式子,感觉个个都是谜语人,然而确实只需要下面三个式子就行了... 对于 FFT,我们求的就是多项式卷积,思路是对数组变换一波,然后点乘,然后再逆变换回来 对于数组 A 和 B,求 C 定义为:$$C_i=\sum_{j\oplus k = i}A_j \times B_k$$ 其中 \(\oplus\) 分别可以是FFT/NTT/FWT重学or新学?
不知不觉,就开始学习多项式了,好快啊 重新拾起我之前学的百嘛不是的\(FFT\),新学\(NTT/FWT\) 开始吧学习博客 FWT博客 FFT:快速傅里叶变换 总的来说就是快速求取两个多项式的乘积 把板子粘在这里Luogu3803 多项式乘法 code #include<bits/stdc++.h> using namespace std; #define fo[学习笔记]快速莫比乌斯与快速沃尔什变换
直接给定形式吧。 不给证明了。 或卷积 \(c_i = \sum_{i | j =k} a_i * b_i\) 写作\(FWT(A)_i = \sum_{j \in i}A_j\) 将\(A\)对半分为\(A_0,A_1\) \(FWT(A) = \left\{ \begin{aligned} (FWT(A_0),FWT(A_0) + FWT(A_1))\\ A(len_A = 0) \end{aligned} \right.\) 先转成\(FWT\)后,两位运算卷积与集合幂级数
位运算卷积: 定义位运算卷积: 第 \(i\) 项和第 \(j\) 项的乘积贡献到第 \(i⊕j\) 项。其中 \(⊕\) 是某种位运算,即: \[S[k]=\sum_{i⊕j=k}A[i]⋅B[j] \]记作: \[S=A*B \]构造 \(FWT\) 变换: 尝试把位运算卷积转化成点积。 设 \(fwt(A)\) 是幂级数 \(A\) 经过 \(FWT\) 变换之后得到的幂CF850E Random Elections 题解
Link. Codeforces Luogu Description. 有一个函数 \(f(S)\) 表示当状态为 \(S\) 的投票状态是 \(1\) 赢还是 \(2\) 赢。 现在每个人等概率随机一个 ABC 的排列表示三个候选人的优先级。 进行三轮大选,问存在一个人赢了两局的概率。 保证 \(f(S)=f(T\oplus S)\),\(T\) 表示全集。 Sol[Codeforces]662C - Binary Table(FWT)
一些套路的整合题,是一个好题。 题意: 给定一个\(n\times m\)的01矩阵,每次可以选择一行或者一列进行取反,问任意进行操作后,矩阵中剩下的1最少有几个。 \(n\le 20, m\le 10^5\) 先进行一下转化,首先注意到\(n\)是很小的,有一个贪心策略是,确定了行的取反状态后,列的取反方案其实确定了,每一[Luogu]P5387 [Cnoi2019]人形演舞(FWT,SG函数)
刚好FWT和SG函数都刚学,这道题也挺模板的,就拉来做做。 手动打个SG函数表发现\(sg[2^k+n]=n+1\),然后博弈论就被干掉了,剩下的问题变成,有\(m\)个数可以选,选择\(v\)个数使得异或和为\(0\)。 这道题题意有锅吧,正确表述应该是大小为\(V\)的序列,而不是集合,因为方案数跟选取顺序有关。 令\(Solution -「Gym 102956A」Belarusian State University
\(\mathcal{Description}\) Link. 给定两个不超过 \(2^n-1\) 次的多项式 \(A,B\),对于第 \(i\in[0,n)\) 个二进制位,定义任意一个二元加法 \(\oplus_i:\{0,1\}\times\{0,1\}\rightarrow\{0,1\}\),而对于两个整数 \(u,v\in[0,2^n)\),定义 \(u\oplus v=\sum_{i=0}^{n-1}(u_i\oplFWT整理
FWT by AmanoKumiko 1.Or \[A_i=∑_{j|i=i}Aj \]\[FWT[A]=merge(FWT[A_0],FWT[A_0]+FWT[A_1]) \]\[UFWT[A]=merge(UFWT[A_0],UFWT[A_1]-UFWT[A_0]) \] 2.And \[A_i=∑_{j\ and\ i=i}Aj \]\[FWT[A]=merge(FWT[A_0]+FWT[A_1],FWT[A_1]) \]\[UFWT[A]=merge(UFWT[A_0]-Atcoder Beginner Contest 212 G,H题解
G Description ∀ x ∈ [ 0 , P )FMT/FWT
用处 处理一些位运算卷积,\(O(n2^n)\) \[c_i=\sum_{k \oplus j=i} a_k\times b_j \]大体思想 构造某种映射,使得能够 \(O(n\log n)\) 内得到变换,假设原数列为 \({a_n}\),新数列就是 \({fwt[a]_i}\)。 然后知道了 \({fwt[a]_i}\) 和 \({fwt[b]_i}\),能 \(O(n)\) 得到 \({fwt[c]_i}\) 最容斥原理
一般化,有若干个物品,若干个属性,每个物品有若干个属性(可能没有)。现在要求有属性的物品的总数。 我们要求的,就是拥有某一个属性的总数,减去拥有某两个属性的总数,加上拥有某三个属性的总数,依次类推。 应用 直接容斥 固定什么是物品,什么是属性,然后直接根据定义直接容斥。 硬币购物 一种