快速傅里叶变换
文章平均质量分 62
_beginend
这个作者很懒,什么都没留下…
展开
-
【牛客多校20210719 Olefin】【计数、分治FFT】
(我是superguymj,因为没有blog,所以就发到这来了。感谢beginend的友情铺位)简单题意给定一个长度为 nnn 的 010101 串,每次翻转一个两端为 111 的交替段。求连续翻转kkk次的方案数(保证没有连续的 111)。题解显然,由连续多个 000 隔开的 010101 交替段之间互相独立,因此只需考虑 111 的个数为 nnn 的交替串连续翻转 0 n0~n0 n 次的方案数,然后卷起来即可。一次操作可以看成一个区间,那么区间之间只能嵌套不能包含,并且后原创 2021-07-22 18:17:28 · 347 阅读 · 0 评论 -
【Codechef POLYEVAL Evaluate the polynomial】【FFT】
题意nnn次多项式模ppp意义下多点求值。n≤250000,p=786433n\le 250000, p=786433n≤250000,p=786433分析可以直接上O(nlog2n)O(n\log^2n)O(nlog2n)的多项式多点求值(不可能的)。注意到,DFT的过程本身就是特殊的多点求值,对应的横坐标分别是ω0,ω,⋯ ,ωn−1\omega^0,\omega,\cdots,\omega^{n-1}ω0,ω,⋯,ωn−1,其中ω\omegaω是nnn次单位根。在NTT中,模ppp意义下n原创 2020-06-26 08:16:04 · 319 阅读 · 0 评论 -
【Codechef DEVLOCK Devu and Locks】【倍增二维FFT】
题意求有多少个nnn位十进制数(可以有前导零),满足模ppp等于000且每一位数字之和不超过mmm。n≤109,p≤16,m≤15000n\le 10^9,p\le 16, m\le 15000n≤109,p≤16,m≤15000分析注意到第iii位贡献的系数为10i mod p10^i\bmod p10imodp,两位的贡献不同当且仅当对应系数不同。因此可以把数位按照系数分类。设numinum_inumi表示有多少位满足贡献系数为iii。numinum_inumi可以通过求10k10^k10k原创 2020-06-24 12:27:56 · 272 阅读 · 0 评论 -
【Codeforces 1257G Divisor Set】【Dilworth定理+分治FFT】
题意设x=p1p2⋯pnx=p_1p_2\cdots p_nx=p1p2⋯pn,其中pip_ipi为质数,要求在xxx的所有约数中选出尽可能多的数组成一个集合,使得集合内的数互不整除,NTT模数。n≤2∗105,pi≤3∗106n\le2*10^5,p_i\le3*10^6n≤2∗105,pi≤3∗106分析比赛结束前几分钟才想到所以时间不够,果然退役之后手速下降的厉害啊。把每...原创 2019-11-14 01:14:13 · 537 阅读 · 2 评论 -
Codeforces 954I Yet Another String Matching Problem FFT
题意有两个字符串,每次可以进行如下操作:选择两个字符c1,c2c1,c2c_1,c_2,然后把两个字符串中所有的c1c1c_1替换成c2c2c_2。定义两个长度相等的字符串的距离为,最少需要多少次操作使得两个字符串相等。现在给出长度为n的字符串S和长度为m的字符串T。问对于S中所有长度为m的子串,和T的距离是多少。 n,m≤125000n,m≤125000n,m\le125000,字符集大小...原创 2018-05-24 10:03:16 · 336 阅读 · 0 评论 -
LibreOJ #2541.「PKUWC 2018」猎人杀 分治NTT+容斥原理
题意猎人杀是一款风靡一时的游戏“狼人杀”的民间版本,他的规则是这样的: 一开始有nnn个猎人,第iii个猎人有仇恨度wiwiw_i,每个猎人只有一个固定的技能:死亡后必须开一枪,且被射中的人也会死亡。 然而向谁开枪也是有讲究的,假设当前还活着的猎人有[i1...im][i1...im][i_1...i_m],那么有wik∑mj=1wijwik∑j=1mwij\frac{w_{i_k}}{\...原创 2018-05-19 17:24:05 · 794 阅读 · 0 评论 -
Codechef CUTTREE 点分治+任意模数FFT
题意定义森林的强度为连通块大小的平方和。 第0天有一棵n个节点的树,每一天大厨会随机删掉森林中的一条边,共进行n-1天,对于i=0,1,...,n−1i=0,1,...,n−1i=0,1,...,n-1,求出第i天结束时这棵树的强度的期望值。答案模109+7109+710^9+7。 n≤105n≤105n\le10^5分析对于一个有序点对(x,y)(x,y)(x,y),若在第i...原创 2018-04-21 08:33:27 · 355 阅读 · 0 评论 -
Codeforces 960G Bandit Blues 第一类斯特林数+分治FFT
题意定义序列中的一个数为前缀最大值仅当其前面没有比他大的数,后缀最大值同理。问有多少个长度为n的排列满足前缀最大值数量恰好为a,后缀最大值数量恰好为b。 n,a,b≤105n,a,b≤105n,a,b\le10^5分析首先分析一下性质,排列中的最大值,也就是n必然是一个前缀最大值和后缀最大值,且前缀最大值一定在n的前面,后缀最大值一定在n的后面。 设s(i,j)s(i,j)s(...原创 2018-04-19 20:53:08 · 947 阅读 · 0 评论 -
CS Academy Round 75 Permutations NTT
题意给一个正整数n和询问数q,每次询问给出两个数x和y,问有多少长度为n的排列P满足: Py=maxyi=1PiPy=maxi=1yPiP_y=\max_{i=1}^yP_i 2∗Px<Py2∗Px<Py2*P_xn,q<=105,x<yn,q<=105,x<yn,qans(y)=∑i=1n⌊i−12⌋Cy−2i−2(y−2)!(n−y)!ans(y)=...原创 2018-04-06 10:06:15 · 195 阅读 · 0 评论 -
luogu 4233 射命丸文的笔记 多项式求逆
题意给出n,求对于任意的1≤i≤n1≤i≤n1\le i\le n,求在所有i个点且有哈密顿回路的竞赛图中,哈密顿回路的期望数量是多少。答案模998244353 n≤105n≤105n\le10^5分析所有竞赛图的哈密顿回路数量很好求,考虑每一条哈密顿路径的贡献,那么答案就是(n−1)!∗2n(n−1)2−n(n−1)!∗2n(n−1)2−n(n-1)!*2^{\frac{n(n...原创 2018-04-18 08:13:17 · 324 阅读 · 0 评论 -
Codeforces 981H K Paths 分治FFT+树形dp
题意给一棵nnn个节点的树,现在要从树上按顺序选出kkk条路径(可以相同),满足任意一条边要么被覆盖不超过111次,要么被覆盖恰好kkk次,且被覆盖kkk次的边数不能为000。问方案。 n,k≤105n,k≤105n,k\le10^5分析先考虑暴力,我们可以枚举两个端点uuu和vvv,然后保证每条选出的路径都包含这两个点之间的路径。 那么现在要从这两个点为根的子树中分别选出kk...原创 2018-06-13 16:26:52 · 571 阅读 · 0 评论 -
LibreOJ #2527.「HAOI2018」染色 容斥原理+FFT
题意为了报答小C的苹果, 小G打算送给热爱美术的小C一块画布, 这块画布可以抽象为一个长度为nnn的序列, 每个位置都可以被染成mmm种颜色中的某一种. 然而小C只关心序列的nnn个位置中出现次数恰好为sss的颜色种数, 如果恰好出现了sss次的颜色有kkk种, 则小C会产生wkwkw_k的愉悦度. 小C希望知道对于所有可能的染色方案, 他能获得的愉悦度的和对100453580910045...原创 2018-06-21 20:55:22 · 456 阅读 · 2 评论 -
LibreOJ #2320.「清华集训 2017」生成树计数 prufer序列+组合数学+分治FFT
题意有nnn个点,每个点有点权aiaia_i,定义一棵生成树TTT中第iii个点的度数为didid_i,那么该生成树的权值val(T)=(∏i=1nadiidmi)(∑i=1ndmi)val(T)=(∏i=1naididim)(∑i=1ndim)val(T)=(\prod_{i=1}^na_i^{d_i}d_i^m)(\sum_{i=1}^nd_i^m) 求所有生成树的价值的和,答案模998...原创 2018-06-18 21:55:44 · 980 阅读 · 0 评论 -
bzoj 4836: [Lydsy1704月赛]二元运算 cdq分治+FFT
题意定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问。每次询问给定一个数字 c 你需要求出有多少对 (i, j) 使得 a_i opt b_j=c 。 1≤n,m,q,ai,bi≤500001≤n,m,q,ai,bi≤500001\le n,m,q,a_i,b_i\le 50000分析cdq分治,每次用F...原创 2018-06-19 15:15:11 · 293 阅读 · 0 评论 -
Codeforces 438E The Child and Binary Tree 生成函数+牛顿迭代
题意考虑一个含有n个互异正整数的序列c[1],c[2],…,c[n]。如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合{c[1],c[2],…,c[n]}中,我们的小朋友就会将其称作神犇的。并且他认为,一棵带点权的树的权值,是其所有顶点权值的总和。给出一个整数m,你能对于任意的s(1&lt;=s&lt;=m)计算出权值为s的神犇二叉树的个数吗?请参照样例以更好的理解什么样的两棵二叉树会被...原创 2019-02-09 18:09:03 · 270 阅读 · 0 评论 -
LibreOJ #6268. 分拆数 生成函数+多项式exp
题意求1到n的分拆数。n=105n=10^5n=105分析设分拆数的生成函数为F(x)=∑i=1nf(i)xiF(x)=\sum_{i=1}^nf(i)x^iF(x)=i=1∑nf(i)xi显然有F(x)=∏k=1n11−xkF(x)=\prod_{k=1}^n\frac{1}{1-x^k}F(x)=k=1∏n1−xk1两边取对数得lnF(x)=∑i=1nln11−x...原创 2019-02-10 17:13:59 · 562 阅读 · 0 评论 -
洛谷P3711 仓鼠的数学题 伯努利数
题意设Sk(x)=∑i=0xikS_k(x)=\sum_{i=0}^xi^kSk(x)=i=0∑xik给出n和a0,...,ana_0,...,a_na0,...,an,求∑k=0nSk(x)ak\sum_{k=0}^nS_k(x)a_kk=0∑nSk(x)ak其中答案是一个n+1n+1n+1次多项式且定义00=10^0=100=1。n≤250000n\le250...原创 2019-02-12 12:00:24 · 378 阅读 · 0 评论 -
51nod 1514 美妙的序列 多项式求逆
题意某个1~n的排列如果满足:在1~n-1 这些位置后面将序列断开,使得总可以从右边找到一个数,并且该数不大于左边的所有数,则称该序列为“美妙的”。给出n,求长度为n的“美妙的序列”的数量。n≤105n\le10^5n≤105分析不难得到递推式fn=n!−∑i=1n−1fi(n−i)!f_n=n!-\sum_{i=1}^{n-1}f_i(n-i)!fn=n!−i=1∑n−1f...原创 2019-02-12 13:20:21 · 386 阅读 · 0 评论 -
阶乘模大质数
前言现在才学这个的我可以说是很菜了。多项式除法给出一个nnn次多项式F(x)F(x)F(x)和一个mmm次多项式G(x)G(x)G(x),求一个n−mn-mn−m次多项式Q(x)Q(x)Q(x)和一个次数小于mmm的多项式R(x)R(x)R(x),使得F(x)=Q(x)G(x)+R(x)F(x)=Q(x)G(x)+R(x)F(x)=Q(x)G(x)+R(x)首先对于一个nnn次多项式F(x...原创 2019-07-13 22:24:06 · 1120 阅读 · 1 评论 -
hdu 5307 He is Flying FFT
题意给出一个长度为n的非负整数序列a,设s表示a的前缀和,对于所有的0≤i≤sn0≤i≤sn0\le i\le s_n,求所有和为i的子区间的长度和。 n≤105,sn≤5∗104n≤105,sn≤5∗104n\le10^5,s_n\le5*10^4分析看到这种不管怎么暴力搞都要O(n2)O(n2)O(n^2)的题目就应该想到FFT了。 这个构造还是比较巧妙的,不难发现答案就是...原创 2018-04-10 21:40:51 · 228 阅读 · 0 评论 -
bzoj 5217: [Lydsy2017省队十连测]航海舰队 二维转一维FFT
题意Byteasar 组建了一支舰队!他们现在正在海洋上航行着。海洋可以抽象成一张n×m 的网格图,其中有些位置是“.”,表示这一格是海水,可以通过;有些位置是“#”,表示这一格是礁石,不可以通过;有些位置是“o”,表示这一格目前有一艘舰,且舰离开这一格之后,这一格将变为“.”。这些“o” 表示Byteasar 的舰队,他们每天可以往上下左右中的一个方向移动一格,但不能有任何一艘舰驶出地图。特...原创 2018-03-29 20:27:34 · 1053 阅读 · 0 评论 -
bzoj 3509: [CodeChef] COUNTARI 分块fft
题意给定一个长度为N的数组A[],求有多少对i, j, k(1<=i < j < k<=N)满足A[k]-A[j]=A[j]-A[i]。 N<=100000,A[i]<=30000分析把式子画一下就变成了A[j]*2=A[k]+A[i],一个很显然的想法就是枚举j然后fft,复杂度是O(NVlogV),显然不能接受。 考虑分块,设块的大小为B,我...原创 2018-02-28 16:08:52 · 316 阅读 · 0 评论 -
bzoj 4827: [Hnoi2017]礼物 fft
题意有两个长度为n的序列,序列元素为[1,m]。 定义两个序列的差异值为∑ni=1(x[i]−y[i])2\sum_{i=1}^n(x[i]-y[i])^2 现在可以给第一个序列加上一个长度c,第二个序列可以任意旋转,问最小差异值。 n<=50000,m<=100分析如果不是在知乎上看到这题正解是fft的话我可能不会那么快就想到正解吧。。。 不过这题的确挺裸的。 把式子拆开就变成了∑ni=原创 2017-04-17 20:51:12 · 1640 阅读 · 1 评论 -
bzoj 4503: 两个串 fft
题意兔子们在玩两个串的游戏。给定两个字符串S和T,兔子们想知道T在S中出现了几次,分别在哪些位置出现。注意T中可能有“?”字符,这个字符可以匹配任何字符。 S 长度不超过 10^5, T 长度不会超过 S。 S 中只包含小写字母, T中只包含小写字母和“?”分析真的没想到这种题还可以用fft来做。。。我们可以定义两个长度均为n的字符串的距离为∑ni=1(s1[i]−s2[i])2\sum_{i=1原创 2017-04-14 11:47:56 · 441 阅读 · 0 评论 -
bzoj 4555: [Tjoi2016&Heoi2016]求和 NTT
题意计算这样一个函数的值: S(i, j)表示第二类斯特林数,递推公式为: S(i, j) = j ∗ S(i − 1, j) + S(i − 1, j − 1), 1 <= j <= i − 1。 边界条件为:S(i, i) = 1(0 <= i), S(i, 0) = 0(1 <= i) 你能帮帮他吗? n<=100000分析第二类斯特林数S(n,m)在组合数学中的意义就是把n个不原创 2017-04-05 16:17:48 · 521 阅读 · 0 评论 -
bzoj 3992: [SDOI2015]序列统计 NTT
题意小C有一个集合S,里面的元素都是小于M的非负整数。他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数列中的每个数都属于集合S。 小C用这个生成器生成了许多这样的数列。但是小C有一个问题需要你的帮助:给定整数x,求所有可以生成出的,且满足数列中所有数的乘积mod M的值等于x的不同的数列的有多少个。小C认为,两个数列{Ai}和{Bi}不同,当且仅当至少存在一个整数i,满足Ai≠Bi。另原创 2017-03-03 21:56:08 · 490 阅读 · 0 评论 -
bzoj 4332: JSOI2012 分零食 fft
题意把正整数M分解成至多N份且每份不为0(注意1+2+3与2+3+1是不一样的即存在顺序性),一份x的价值是f(x)=a2∗x∗x+a1∗x+a0,总价值为每一份价值的乘积。求所有情况下总价值的和,答案模mo。把正整数M分解成至多N份且每份不为0(注意1+2+3与2+3+1是不一样的即存在顺序性),一份x的价值是f(x)=a2*x*x+a1*x+a0,总价值为每一份价值的乘积。求所有情况下总价值的和原创 2017-03-08 21:31:32 · 775 阅读 · 0 评论 -
bzoj 3771: Triple 快速傅里叶变换+容斥原理
题意给定n个物品,可以用一个/两个/三个不同的物品凑出不同的价值,求每种价值有多少种拼凑方案(顺序不同算一种)分析显然搞一波母函数然后直接上fft即可。 问题是怎么处理重复的。 设x为只选一个,y为选两个相同的,z为选三个相同的,那么答案就是x+(x*x-y)/2+(x*x*x-3*x*y+z*2)/6解释一下,x就是只选一个,(x*x-y)/2表示选两个减去重复的再除以排列,(x*x*x-3*原创 2017-03-04 15:07:32 · 415 阅读 · 0 评论 -
bzoj 3527: [Zjoi2014]力 快速傅里叶变换
题意给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. n<=100000分析打个表出来就可以发现规律: 设a[i]=qi,b[i]=1i2,那么Ej=∑a[i]∗b[j−i]−∑a[i]∗b[i−j]设a[i]=q_i,b[i]=\frac{1}{i^2},那么Ej=\sum a[i]*b[j-i]-\sum a[i]*b[i-j]可以发现前一个式子原来就是卷积的形式,第原创 2017-03-04 11:56:56 · 639 阅读 · 0 评论 -
bzoj 2194: 快速傅立叶之二 fft
题意请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5。 a,b中的元素均为小于等于100的非负整数。分析把数组a取反即变成了和为定值的形式,直接上fft即可。 注意精度问题。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#inc原创 2017-03-01 19:42:25 · 427 阅读 · 0 评论 -
bzoj 3456: 城市规划 NTT+多项式求逆
题意求出n个点的简单(无重边无自环)无向连通图数目。 你只需要输出方案数mod 1004535809(479 * 2 ^ 21 + 1)即可. n<=130000分析首先要知道递推式f[i]=2c2i−∑j=1i−1f[j]∗Cj−1i−1∗2C2i−jf[i]=2^{c_i^2}-\sum_{j=1}^{i-1}f[j]*C_{i-1}^{j-1}*2^{C_{i-j}^2} 如果不优化直接原创 2017-04-17 16:03:14 · 925 阅读 · 0 评论 -
AtCoder Grand Contest 005 F - Many Easy Problems NTT
题意给一棵树,要求对于任意的k,输出在树上任选k个点构成的虚树大小的和。 n<=200000分析考虑每个点对ans[k]的贡献。 容斥一下可以得到一个点的贡献就是Ckn−∑x∈sonCksize[x]Cnk−∑x∈sonCsize[x]kC_n^k-\sum_{x\in son}C_{size[x]}^k 其中son表示以当前点为根时的儿子集合。 那么有ans[k]=...原创 2018-02-14 13:16:56 · 232 阅读 · 0 评论 -
hdu 6036 Division Game 容斥原理+NTT
题意有k堆花,编号为1到k-1,每堆花都是完全一样的且包含n朵花,分成m种颜色,每种颜色有sisis_i朵花。现在要进行操作,第i轮操作可以在第(i-1) mod k堆花中取走任意朵。当有一堆花被取完后游戏结束。问对于每一堆花,有多少种不同的操作可能使得游戏在该处结束。NTT模数。 n<=100000,m,k<=10分析设f(x)f(x)f(x)表示在一堆花处恰好操作...原创 2018-02-26 17:15:40 · 373 阅读 · 0 评论 -
bzoj 5093: 图的价值 NTT+数学+第二类斯特林数
题意“简单无向图”是指无重边、无自环的无向图(不一定连通)。 一个带标号的图的价值定义为每个点度数的k次方的和。 给定n和k,请计算所有n个点的带标号的简单无向图的价值之和。 因为答案很大,请对998244353取模输出。 1分析枚举每个点和每个点连出去的边的数量,总共有n-1个点可以连,然后剩下的边连不连都可以。不难分析出ans=n∗2(n−1)∗(n−2)2∗∑i=0n原创 2017-12-09 17:28:27 · 2630 阅读 · 11 评论 -
bzoj 3451: Tyvj1953 Normal 点分治+fft
题意某天WJMZBMR学习了一个神奇的算法:树的点分治! 这个算法的核心是这样的: 消耗时间=0 Solve(树 a) 消耗时间 += a 的 大小 如果 a 中 只有 1 个点 退出 否则在a中选一个点x,在a中删除点x 那么a变成了几个小一点的树,对每个小树递归调用Solve 我们注意到的这个算法的时间复杂度跟选择的点x是密切相关的。 如果x是树的重心,那么时间复原创 2017-12-28 20:24:26 · 526 阅读 · 0 评论 -
51nod 1172 Partial Sums V2 任意模数FFT
题意给出一个数组A,经过一次处理,生成一个数组S,数组S中的每个值相当于数组A的累加,比如:A = {1 3 5 6} => S = {1 4 9 15}。如果对生成的数组S再进行一次累加操作,{1 4 9 15} => {1 5 14 29},现在给出数组A,问进行K次操作后的结果。(输出结果 Mod 10^9 + 7) 2 <= n <= 50000, 0 <...原创 2017-12-18 21:51:45 · 805 阅读 · 0 评论 -
51nod 1348 乘积之和 分治+NTT+中国剩余定理
题意给出由N个正整数组成的数组A,有Q次查询,每个查询包含一个整数K,从数组A中任选K个(K <= N)把他们乘在一起得到一个乘积。求所有不同的方案得到的乘积之和,由于结果巨大,输出Mod 100003的结果即可。例如:1 2 3,从中任选1个共3种方法,{1} {2} {3},和为6。从中任选2个共3种方法,{1 2} {1 3} {2 3},和为2 + 3 + 6 = 11。 1 <= N,原创 2017-12-23 07:38:22 · 466 阅读 · 0 评论 -
51nod 1565 模糊搜索 fft
题意有两个基因串S和T,他们只包含AGCT四种字符。现在你要找出T在S中出现了几次。 有一个门限值k≥0。T在S的第i(1≤i≤|S|-|T|+1)个位置中出现的条件如下:把T的开头和S的第i个字符对齐,然后T中的每一个字符能够在S中找到一样的,且位置偏差不超过k的,那么就认为T在S的第i个位置中出现。也就是说对于所有的 j (1≤j≤|T|),存在一个 p (1≤p≤|S|),使得|(i+j-1原创 2017-10-24 15:35:25 · 479 阅读 · 0 评论 -
bzoj 3160: 万径人踪灭 manachar+快速傅里叶变换
题意给你一个长度为n且仅含a和b的字符串,问有多少个子序列满足:不连续,下标沿某个点对称,且为回文串。 n<=100000分析我们可以先不管第一个条件,然后再跑一遍manachar求出所有连续的就好了。 把串两两之间随便插入一个字符,枚举对称轴,设为x,现在就是要求出所有的f[x]表示有多少对(i,j)满足i < j且i和j沿x对称且s[i]不等于s[j]。 考虑如何求f[x]。 不难注意到原创 2017-11-07 21:17:43 · 279 阅读 · 0 评论 -
bzoj 2179: FFT快速傅立叶
题意求两个n位大数相乘。 n<=60000分析上一波板。 推荐一个不错的blog代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<complex>#include<cmath>#define pi acos(-1)#define N 1原创 2017-03-01 17:30:58 · 357 阅读 · 0 评论