
FFT & FWT
文章平均质量分 78
LowestJN
强省弱OIer
展开
-
[BZOJ3771][生成函数][FFT][容斥原理]Triple
题意给定n个数,求从其中选1个、2个、3个能得到的权值和的情况及方案数生成函数裸题 刚接触这玩意并不是很能理解,也不是很懂怎么表达……考虑f(i)f(i)表示权值和为i的方案数,那么有f(i)=∑f(j)∗f(i−j)f(i)=\sum f(j)*f({i-j}),为卷积形式, 那么令母函数g(x)=∑aixig(x)=\sum a_ix^i的第m项系数为权值和为m的方案数,就可以用FFT优化多原创 2017-02-21 20:38:34 · 673 阅读 · 0 评论 -
[第二类斯特林数 FFT] BZOJ5093. 图的价值
怕是一道套路题…然而这种题还是不太会 考虑每个点的贡献都是相同的 那么答案就是 n2(n−12)∑i=0n−1(n−1i)ikn2^{n-1\choose 2}\sum_{i=0}^{n-1}{n-1\choose i}i^kiki^k 用第二类斯特林数带进去得到n2(n−12)∑i=0n−1(n−1i)∑j=0kS(k,j)j!(ij)n2^{n-1\choose 2}\sum_{i=0}^{原创 2017-12-09 23:30:00 · 621 阅读 · 0 评论 -
[FFT] Atcoder AGC005F. Many Easy Problems
每个点的贡献是这个点出现在多少个方案中 方案数是 (nk)−∑(Sik){n\choose k}-\sum{S_i\choose k},SiS_i 表示删去这个点后剩下的子树的大小那么答案就是n(nk)−∑i=knai(ik)n{n\choose k}-\sum_{i=k}^n a_i{i\choose k} aia_i 表示有 aia_i 个子树大小为 ii 展开后得到1k!∑i=knai⋅原创 2017-12-22 18:50:51 · 511 阅读 · 0 评论 -
[容斥 & 状压DP & FFT] Tco 2016 Final. HamiltonianPaths
相当于是问有多少种排列,使得相邻的点之间没有边 考虑容斥 一张图中选了 dd 条边,那么会形成 n−dn-d 条链,设所有图中的链总共有 xx 条,那么答案乘上 x!x! 只要DP出形成 aa 条链的方案数,然后NTT一下就可以了// BEGIN CUT HERE // END CUT HERE #include <vector> #include <list> #include原创 2018-01-03 18:37:11 · 408 阅读 · 0 评论 -
[倍增矩乘 FFT] LOJ#6275. 棋盘
考虑dpfi,s,j" role="presentation">fi,s,jfi,s,jf_{i,s,j} 表示前 i" role="presentation">iii 列,最后一列的状态是 s" role="presentation">sss ,有 j" role="presentation">jjj 个联通块的方案数如果令多项式 gi,s(x)=∑i=0nfi,s,ixi原创 2018-02-03 16:40:16 · 551 阅读 · 0 评论 -
[分治FFT] LOJ#6183. 看无可看
推一推 fn" role="presentation">fnfnf_n 的通项fn=a×3n−b×(−1)n" role="presentation">fn=a×3n−b×(−1)nfn=a×3n−b×(−1)nf_n=a\times 3^n-b\times (-1)^na" role="presentation">aaa 和 b"原创 2018-02-03 16:44:33 · 782 阅读 · 0 评论 -
[卷积定理] LOJ#548. 「LibreOJ β Round #7」某少女附中的体育课
设变换矩阵为 TTT由卷积定理可以知道对于 TTT 的每一行的任意 i,ji,ji,j 满足 xi×xj=xi opt xjxi×xj=xi opt xjx_i\times x_j = x_i ~\text{opt}~x_j因为 AAA 满足循环律所以存在 c>1c>1c>1 满足 xci=xixic=xix_i^c=x_i 也就...原创 2018-02-26 10:40:25 · 691 阅读 · 0 评论 -
[矩阵树定理 DFT] LOJ#6271. 「长乐集训 2017 Day10」生成树求和 加强版
因为是三进制不进位加法,所以三进制下每一位是独立的那么只要求出 fi" role="presentation">fifif_i,生成树边权和在模三意义下为 i" role="presentation">iii 的方案数可以用矩阵树定理,矩阵的每个元素是一个三元组,表示方案数这样转移的常数是9,然而数据好像只有小于等于40的…转移实际上是一个循环卷积的形式,考虑DFT那么就要找到原创 2018-02-06 20:48:45 · 777 阅读 · 0 评论 -
[Bluestein's Algorithm DFT] Codechef REALSET. Petya and Sequence
A和B的运算是卷积形式考虑把A和B DFTD(A)∗D(B)=0,D(B)≠0D(A)∗D(B)=0,D(B)≠0D(A)*D(B)=0 , D(B)\neq0也就是 A DFT后至少有一个0求出模某个质数意义下的 2n2n2n 次单位根用Bluestein’s Algorithm DFT#include <cstdio>#include <iost...原创 2018-03-01 16:46:25 · 499 阅读 · 0 评论 -
[链剖 FFT] LOJ#6289. 花朵
树形DP的转移是一个卷积的转移形式可以先链剖,一个点的轻儿子先合并,然后一条重链用分治FFT合并#include <cstdio>#include <iostream>#include <algorithm>#include <vector>#include <queue>using namespace std;...原创 2018-03-05 10:34:14 · 638 阅读 · 0 评论 -
[FWT] Codeforces663E .Binary Table
套路题VP的时候发现这题过的人很多…把每一列状压,每一列就可以表示成小于 2202^{20} 的数字令 aia_i 为状态 ii 出现的次数, bib_i 为状态 ii 的贡献(也就是反转或不反转的1的个数的较小值)SS 表示哪些列被反转那么答案就是 minS{∑ai×bi⊕S}\min_S\{\sum a_i\times b_{i\oplus S}\}这就是个FWT的形式直接搞就好了#includ原创 2017-10-17 10:33:37 · 406 阅读 · 0 评论 -
[多维FFT Bluestein′s Algorithm] Codechef October Challenge 2017 .Chef and Horcrux
题目里那个 其实不重要,只要能算出 pip_i 就行了pip_i 的话发现就是个多维FFT的转移形式到Hillan大佬博客里拷了个代码改一改就好了…Bluestein算法里的FFT可以用暴力卷积代替,因为数据范围小FFT常数大#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>#include<algori原创 2017-10-17 07:47:48 · 1038 阅读 · 0 评论 -
[BZOJ3509][CodeChef][FFT][分块]COUNTARI
分块FFT练习题#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <cmath>#define N 200010using namespace std;typedef long long ll;struct E{ double real原创 2017-02-23 15:37:50 · 562 阅读 · 0 评论 -
[BZOJ4259][FFT]残缺的字符串
复习一下FFT http://blog.youkuaiyun.com/u011542204/article/details/50708834 感觉这种字符串匹配的方法很棒啊 然而我的代码被卡常卡内存……#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#define eps 1e-7#define N原创 2017-04-10 14:33:10 · 408 阅读 · 0 评论 -
[BZOJ3527][Zjoi2014][FFT]力
题意求每个qiq_i的Ei=∑j<iqj(i−j)2−∑j>iqj(i−j)2E_i=\sum_{j<i}\frac{q_j}{(i-j)^2}-\sum_{j>i}\frac{q_j}{(i-j)^2}裸的FFT…. 第一发FFT…… 令f(i)=qif(i)=q_i,f′(i)=qn−i+1f'(i)=q_{n-i+1},g(i)=1i2g(i)=\frac{1}{i^2} 那么E(i)=原创 2017-02-02 16:18:47 · 730 阅读 · 0 评论 -
[BZOJ3456] [多项式求逆] 城市规划
多项式求逆模板题%%%Manchery#include <cstdio>#include <iostream>#include <algorithm>#define N 390010#define P 1004535809#define G 3using namespace std;int n,m,num;int w[2][N];int a[N],b[N],c[N],fac[N];in原创 2017-06-04 19:46:41 · 488 阅读 · 0 评论 -
[BZOJ3625][Codeforces Round #250][多项式求逆][多项式开根]小朋友和二叉树
模板题 题解#include <cstdio>#include <iostream>#include <algorithm>#include <string>#include <cstring>#define N 300010#define P 998244353#define G 3using namespace std;int n,m,M,num;int a[N],b[N],c原创 2017-06-04 19:48:18 · 861 阅读 · 0 评论 -
[BZOJ3992] [SDOI2015] [NTT] 序列统计
先写出DP方程 f(i,j)f(i,j)表示放了ii个数,乘积模mm为jj的方案数 那么f(i,j)=∑ab=j,a∈S,b∈Sf(i−1,a)∗f(f−1,b)f(i,j)=\sum _{ab=j,a\in S,b\in S} f(i-1,a)*f(f-1,b) 这个可以用矩阵+快速幂优化 但是不够优 发现模数比较特别,如果可以把乘号变成加号,就可以用NTT+快速幂来做 用mm的原根gg原创 2017-06-06 17:37:28 · 492 阅读 · 0 评论 -
[LOJ #6156][找原根][FFT || NTT] A*B Problem
题目要求对于所有0≤k<m0\leq k<m的kk都输出解,可以考虑anskans_k的生成函数。 ansk=∑i×j=kai∗ajans_k=\sum_{i\times j=k} a_i*a_j aia_i为ii的出现次数,这样可以矩乘优化,但是复杂度太大,因为m是质数,所以依然可以考虑用原根,把aia_i转化成gbig^{b_i},那么ansk=∑i+j=kbi∗bjans_k=\sum_{原创 2017-07-04 17:16:24 · 861 阅读 · 2 评论 -
[DP][倍增NTT]LOJ#6059. 2017 山东一轮集训 Day1. Sum
另fi,j,kf_{i,j,k}表示前ii位,模pp为jj,和为kk的方案数列出DP方程 fi,j,k=∑s=09fi−1,(js)%p,k−sf_{i,j,k}=\sum_{s=0}^9 f_{i-1,({j\over s})\%p,k-s} n这么大,一看就要倍增,j很小,倍增的时候可以直接枚举fj,k=∑a×b=j∑x=0kfa,x∗fb,k−xf_{j,k}=\sum_{a\times原创 2017-07-07 16:58:01 · 749 阅读 · 0 评论 -
[FWT && 链分治] BZOJ4911.[Sdoi2017]切树游戏
可以看immortalCO大佬的博客我是参考了Manchery的代码…#include <cstdio>#include <iostream>#include <algorithm>#include <vector>using namespace std;const int N=30010,M=310,P=10007,inv2=P+1>>1;inline char nc(){ stat原创 2017-09-27 21:43:16 · 1200 阅读 · 0 评论 -
[多项式exp] LOJ#556. 「Antileaf's Round」咱们去烧菜吧
学一发分治FFT求多项式exp感觉这种打法应该比牛顿迭代好打多了#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int N=1000010,P=998244353;inline void add(int &x,int...原创 2018-03-06 10:47:33 · 590 阅读 · 0 评论