FFT/NTT/FWT/FMT/多项式
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
uoj34 多项式乘法(FFT板子)
具体讲解可以去看算法导论。。。迭代版比递归版快到飞起orz递归版#include #include #include #include #include using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 262145#define pi acos(-1)typedef co原创 2018-02-01 23:12:17 · 300 阅读 · 0 评论 -
bzoj4036 [HAOI2015]按位或(概率与期望+fmt)
vfk的论文题。具体可以参见国家集训队2015论文集 吕凯风的《集合幂级数的性质与应用及其快速算法》 这题就是求集合并卷积,用快速莫比乌斯变换即可。 答案就是∑k=1ook∗(pk[U]−pk−1[U])∑k=1ook∗(pk[U]−pk−1[U])\sum\limits_{k=1}^{oo}k*(p^k[U]-p^{k-1}[U]) 莫比乌斯变换之后,化简一下,就得到了一个等比数列,因为∑...原创 2018-06-12 15:08:24 · 440 阅读 · 0 评论 -
bzoj4589 Hard Nim(博弈论+fwt+快速幂)
搞出生成函数,把它异或卷积n次即可,最后答案就是0的系数。 fwt之后直接快速幂即可。再ifwt回来。 复杂度O(mlogm+mlogn)O(mlogm+mlogn)O(mlogm+mlogn)#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#de...原创 2018-05-25 14:42:05 · 517 阅读 · 0 评论 -
hdu5909 Tree Cutting(树形dp+fwt)
首先关于fwt:许久的坑,终于填上了。 讲得很好:portal fwt就是求Ck=∑i?j=kAi∗BjCk=∑i?j=kAi∗BjC_k=\sum\limits_{i?j=k}A_i*B_j,其中?为二元位运算符,^,|,&等等。 我们要构造出一种变换形式,类似fft那样,把卷积变成乘积。 令A=(A0,A1)A=(A0,A1)A=(A_0,A_1),按最高位为1/0划分即可。 ...原创 2018-05-25 13:08:40 · 261 阅读 · 0 评论 -
loj108 多项式乘法(FFT模板题)
手写complex,大概可以快了一倍吧qaq 我认输,我手写complex还不行吗! 因为是模拟大整数乘法,所以最后的系数最大不超过1e5*9*9,因此也可以ntt。FFT#include <cstdio>#include <cstring>#include <algorithm>#include <complex>#includ...原创 2018-04-28 14:46:30 · 331 阅读 · 0 评论 -
bzoj3992 [SDOI2015]序列统计(NTT+多项式快速幂+生成函数)
首先类似实数域的对数,我们在模意义下有离散对数ind。设模数为m,m的原根为g,则ind(i)=j表明gj≡imodmg^j\equiv i \mod m。根据原根的性质,我们知道{ind(x)}和{x}是一一对应的。 类似对数,我们可以把模意义下的乘法运算化作模意义下的加法运算: ind(xy%m)=(ind(x)+ind(y))%m−1ind(xy\%m)=(ind(x)+ind(y))\%原创 2018-04-03 10:53:46 · 294 阅读 · 0 评论 -
bzoj3771 Triple(生成函数+FFT+组合数学)
首先1个的直接统计 将所有的数搞成一个生成函数,做一遍卷积搞出来选2个的答案 但是2个的存在选了两个相同的,或者选了一个排列,直接除2即可 然后生成函数卷两次统计选3个的答案 这里需要容斥一下,(选3个的答案-强行选了2个一样的*3+强行选了3个一样的*2)/6才是不考虑顺序、选不重复的3个的答案 强行选了3个一样的直接枚举,强行选了2个一样的就将每一个数的两倍搞成生成函数再和...原创 2018-04-02 11:55:02 · 333 阅读 · 0 评论 -
bzoj4555 [Tjoi2016&Heoi2016]求和(斯特林数+ntt)
我会ntt?假的。我会多项式求逆?假的。我会斯特林数?假的。官方给的题解是cdq+ntt或者多项式求逆,然而我不会gg 还好还有一种可以直接ntt的,给跪orzAns=∑i=0n∑j=0iSi,j×2j×(j!)Ans=\sum\limits_{i=0}^n\sum\limits_{j=0}^iS_{i,j}\times2^j\times(j!) Si,j=1j!∑k=0j(−1)kCkj(j−原创 2018-04-01 16:41:22 · 263 阅读 · 0 评论 -
bzoj4259 残缺的字符串(字符串+fft)
好神啊orz Claris 附上题解传送门:portal 大概就是转换成三段卷积来算。然后大概你要手写complex才能过qaq原创 2018-03-21 12:49:07 · 306 阅读 · 0 评论 -
bzoj3527 [Zjoi2014]力(fft求卷积)
求Ej=∑i=0j−1qi(j−i)2−∑i=j+1n−1qi(i−j)2E_j=\sum\limits_{i=0}^{j-1}\frac{q_i}{(j-i)^2}-\sum\limits_{i=j+1}^{n-1}\frac{q_i}{(i-j)^2} 设Cj=∑i=0j−1qi(j−i)2,Dj=∑i=j+1n−1qi(i−j)2C_j=\sum\limits_{i=0}^{j-1}\fra原创 2018-03-11 23:08:49 · 228 阅读 · 0 评论 -
suoj26 XY宏(ntt板子)
题目传送门:portal 计算两个多项式mod998244353意义下的乘积。和fft基本一样,就是把单位复数根wnw_n换成了单位原根。原根的定义:设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。 (a模m的阶ord m(a)就是满足at≡1modm的最小正整数ta^t\equiv1 \mod m的最小正整数t) 我们常用的模数是998244353,它的原根G=3.原创 2018-03-15 18:54:13 · 253 阅读 · 0 评论 -
bzoj3160 万径人踪灭(manacher+fft)
要求不连续的回文子序列个数。我们考虑用所有的回文子序列个数-连续的回文子序列个数。连续的回文子序列个数就是回文子串的个数,我们可以用manacher来求。考虑如何求回文子序列的总数。我们先都按manacher那样插入若干’#’以后,处理出一个f[i]数组,表示i两侧对称的字母对数。(含自己,不含#)。则总数就是∑i=22n2f[i]−1\sum\limits_{i=2}^{2n}2^{f[i]}-1原创 2018-03-15 22:58:43 · 336 阅读 · 0 评论 -
bzoj3434 [Wc2014]时空穿梭(莫比乌斯函数+多项式乘法)
蒟蒻我第一步共线就没想出来x暴力dp T飞。直接爆零qaq 我们记C个点分别为CiC_i,V为{v1,v2...vn}\{v_1,v_2...v_n\},令Bi=Ci−Ci−1B_i=C_i-C_{i-1}。则我们发现Bi=(ti−ti−1)VB_i=(t_i-t_{i-1})V,也就是说每一个B的各维坐标都是成比例的。我们设第i维的坐标极差为Δxi\Delta x_i(Cn−C1C_n-C_1)原创 2018-01-29 17:53:02 · 481 阅读 · 0 评论 -
bzoj2194 快速傅立叶之二(fft求卷积)
求Ck=∑k<=i<na[i]∗b[i−k]C_k=\sum\limits_{k<=i<n}a[i]*b[i-k]就是求卷积。,我们把b[i]变成b[n-i-1],记a*b的结果为p,则 ∑k<=i<na[i]∗b[n−(i−k)−1]=p[n+k−1]\sum\limits_{k<=i<n}a[i]*b[n-(i-k)-1]=p[n+k-1],最后Ck=p[n+k−1]C_k=p[n+k-1]#原创 2018-02-05 18:50:56 · 323 阅读 · 0 评论 -
bzoj2179 FFT快速傅立叶(大整数乘法,fft)
我们把一个大整数看作∑i=0nai∗xi\sum\limits_{i=0}^na_i*x^i,其中x=10。然后我们就可以当做多项式乘法来做了。最后进一下位。注意取整时要加0.1,虽然我也不知道为什么(逃原创 2018-02-04 13:29:31 · 308 阅读 · 0 评论 -
bzoj5306 [Haoi2018]染色(容斥原理+ntt)
一个不会数数的老年咸鱼选手的学习经历x首先我很快的得到了一个式子:Cim∗n!(s!)i∗(n−is)!∗(m−i)n−isCmi∗n!(s!)i∗(n−is)!∗(m−i)n−isC_m^i*\frac{n!}{(s!)^i*(n-is)!}*(m-i)^{n-is} 但是我说不出它的意义…感觉很重复x,需要容斥x 然后就傻掉了gg其实可以按套路来,给每一项设一个容斥系数b[i], ...原创 2018-06-19 22:55:56 · 325 阅读 · 0 评论