FWT,FST入门】的更多相关文章

0.目录 目录 0.目录 1.什么是 FWT 2. FWT 怎么做 2.1. 或卷积 2.2.与卷积 2.3.异或卷积 2.4.例题 3. FST 3.1. FST 怎么做 3.2.例题 1.什么是 FWT    FWT 全称为 " 快速沃尔什变换: Fast Walsh Transform " .可以用于解决位运算卷积的问题.   什么叫位运算卷积呢?我们考虑普通的卷积,即: \[C_k=\sum_{i+j=k}A_iB_j \]   位运算卷积就是下标为位运算的卷积(此处与和或用…
题目描述 给出一个长度为 $n$ 的序列 $\{s\}$ ,对于所有满足以下条件的五元组 $(a,b,c,d,e)$ : $1\le a,b,c,d,e\le n$ : $(s_a|s_b)\&s_c\&(s_d\text{^}s_e)=2^i$ ,其中 $i$ 为非负整数 : $s_a\&s_b=0$ . 求 $f(s_a|s_b)\times f(s_c)\times f(s_d\text{^}s_e)$ 的和模 $10^9+7$,其中 $f(i)$ 表示斐波那契数列的第 $i…
前言: $FWT$是用来处理位运算(异或.与.或)卷积的一种变换.位运算卷积是什么?形如$f[i]=\sum\limits_{j\oplus k==i}^{ }g[j]*h[k]$的卷积形式(其中$\oplus$为位运算)就是位运算卷积.如果暴力枚举的话,时间复杂度是$O(n^2)$,但运用$FWT$来解决就可达到$O(nlog_{n})$的时间复杂度.$FST$则是借助$FWT$来进行的对子集卷积的优化,相当于$FWT$的一个应用. FWT 与卷积 对于与运算,有一个结论:$(i\&j)\&am…
LINK:州区划分 把题目中四个条件进行规约 容易想到不合法当前仅当当前状态是一个无向图欧拉回路. 充要条件有两个 联通 每个点度数为偶数. 预处理出所有状态. 然后设\(f_i\)表示组成情况为i的值. 枚举子集转移 可以发现利用FST进行优化. FST怎么做?详见另一篇文章史上最详细FST解释 code //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<ctime>…
LINK:子集卷积 学了1h多 终于看懂是怎么回事了(题解写的不太清楚 翻了好几篇博客才懂 一个需要用到的性质 二进制位为1个数是i的二进制数s 任意两个没有子集关系.挺显然. 而FST就是利用这个性质靠FWT做的. 直接说做法: 定义\(f_{i,s}\)表示|s|为i状态为s的值. 对于另一个g数组也同时定义.设答案为h. 那么有 \(h_{i,s}=\sum_{j \subseteq s}f_{|j|,j}\cdot \sum_{w\subseteq s,w|j==s}g_{i-|j|,w…
知识点简单总结--FWT(快速沃尔什变换),FST(快速子集变换) 闲话 博客园的markdown也太傻逼了吧. 快速沃尔什变换 位运算卷积 形如 $ f[ i ] = \sum\limits_{ j \oplus k = i} g[ j ] * h[ k ] $ 的形式的式子. 正常计算是 $ n^{ 2 } $ . 与运算卷积 众所周知有 $ ( i \& j ) == k \longleftrightarrow ( i \& k == k ) \& \& ( j \&…
CF914G Sum the Fibonacci(FWT,FST) Luogu 题解时间 一堆FWT和FST缝合而来的丑陋产物. 对 $ cnt[s_{a}] $ 和 $ cnt[s_{b}] $ 求FST,对 $ cnt[s_{d}] $ 和 $ cnt[s_{e}] $ 求异或卷积,然后对 $ cnt[ s_{ a }| s_{ b } ] \times f[ s_{ a }| s_{ b } ] $ , $ cnt[ s_{ c } ] \times f[ s_{ c } ] $ , $…
[WC2018]州区划分(FWT,FST) Luogu loj 题解时间 经典FST. 在此之前似乎用到FST的题并不多? 首先预处理一个子集是不是欧拉回路很简单,判断是否连通且度数均为偶数即可. 考虑朴素状压dp很容易得到 $ f_{ S } = \sum\limits_{ T \subseteq S } f_{ S - T } \times ( \frac{ val_{ T } }{ val_{ S } } )^{p} $ . 直接dp时间复杂度 $ 3^{ N } $ 当场去世. 但由于是…
题目链接: [WC2018]州区划分 题目大意:给n个点的一个无向图,点有点权,要求将这n个点划分成若干个部分,每部分合法当且仅当这部分中所有点之间的边不能构成欧拉回路.对于一种划分方案,第i个部分的权值为这一部分中所有点的权值和比上前i部分所有点的权值和的p次方,一种划分方案的权值为每部分的权值之积.要求求出所有划分方案的权值之和. 我们设f[S]为选中点的状态集合为S时的答案(其中S为二进制状态),设T为S集合最后一次划分出的集合且要保证集合T合法,那么可以得到转移方程(其中sum代表集合中…
#include <bits/stdc++.h> using namespace std; #define ll long long const ll maxn = 3e5+5; const ll mod = 1e9+7; ll n; ll a[maxn], b[maxn]; void fwt(ll *a) { for(ll d=1;d<n;d<<=1) for(ll m=d<<1,i=0;i<n;i+=m) for(ll j=0;j<d;j++) {…