快速傅立叶变换【FFT】
poursoul
这个作者很懒,什么都没留下…
展开
-
【SPOJ】Triple Sums【FFT】
传送门:【SPOJ】Triple Sums题目分析:首先我们不考虑i<j<ki<j<k这个条件,构造多项式: Y=∑xai\qquad\qquad\qquad Y = \sum x^{a_i} 那么ai+aj+ak=Sai+aj+ak=S的个数即xai+aj+ak=Sx^{a_i+a_j+a_k=S}的个数,等价于Y3中xSY^3中x^S的系数。 然后我们考虑容斥: (∑x)3=∑x3+3∑原创 2015-04-29 16:49:15 · 1088 阅读 · 0 评论 -
【HDU】5244 inverse【打表找规律——FFT】
传送门:【HDU】5244 inverse题目分析:将f(i,j)f(i,j)看成矩阵XX,AA为ai数组,BB为bi数组,则有:AX=BAX=B,推出A=BX−1A=BX^{-1}首先根据题意打一个X−1X^{-1},然后就可以发现规律……然后就可以用FFTFFT的思想去做这道题了……具体不说了,这样的东西谁试谁知道,反正我一步都不会证明,不会憋别找我……my code:my~~code:#in原创 2015-05-28 22:30:42 · 1261 阅读 · 0 评论 -
【HDU】5279 YJC plays Minecraft【cdq分治+NTT】
传送门:【HDU】5279 YJC plays Minecraft忘记修改测试时的分治大小交了一发,不然就1A了……整个题目的关键在对N个点的森林个数计数,这个我是昨晚躺床上突然想到的www,不过队友早就过了……膜拜之。dp一直是我的弱点啊= =令fnf_n为n个点的生成树个数,幸运的是fn=nn−2f_n=n^{n-2}。则对于n个点的森林个数,有公式: dpn=∑i=1ndpn−iCi−1n−原创 2015-07-09 11:48:18 · 1360 阅读 · 0 评论 -
【HDU】5307 He is Flying【分别统计+NTT】
传送门:【HDU】5307 He is FlyingPS:神奇的姿势可以用double或long double过(FFT),我是过不了my code:my~~code:#include <bits/stdc++.h>using namespace std ;typedef long long LL ;#define clr(a,x) memset ( a , x , sizeof a )cons原创 2015-07-27 16:03:42 · 1586 阅读 · 0 评论 -
【51nod】算法马拉松4 F 移数字 【快速求N!%P】【FFT】
传送门:【51nod】算法马拉松4 F 移数字涉及知识点:多项式求逆,多项式除法,多点插值,阶乘取模。对于N!%P,复杂度为O(N−−√log2N−−√)O(\sqrt N \log^2\sqrt N)。 但常数巨大,和暴力算实际复杂度只相差常数= = 这个是可以扩展到组合数取模的~my code:my~~code:#include <stdio.h>#include <string.h>原创 2015-08-03 21:06:22 · 2026 阅读 · 0 评论 -
【codechef】 Prime Distance On Tree【求树上路经长度为i的路径条数】【点分治+FFT】
传送门:【codechef】 Prime Distance On Tree点分治+FFT水题……竟然n*n爆int没发现…… 而且NTT TLE,FFT跑的超级快……my code:my~~code:#include <bits/stdc++.h>using namespace std ;typedef long long LL ;#define clr( a , x ) memset ( a原创 2015-08-05 10:50:08 · 1524 阅读 · 0 评论 -
【FZU】2208 cleaning again【模数质因数以3为众数的三进制NTT】
由Ak=A[0](w3kn)+wkn⋅A[1](w3kn)+w2kn⋅A[2](w3kn)A_{k}=A^{[0]}(w_n^{3k})+w_n^{k}\cdot A^{[1]}(w_n^{3k})+w_n^{2k}\cdot A^{[2]}(w_n^{3k}) 得yk=y[0]k+wkn⋅y[1]k+w2kn⋅y[2]ky_{k}=y_{k}^{[0]}+w_n^{k}\cdot y_{k}^{原创 2015-11-16 19:23:23 · 1552 阅读 · 0 评论 -
【BZOJ】3992 [SDOI2015]序列统计 【离散对数下的NTT】
题目链接:【BZOJ】3992 [SDOI2015]序列统计 利用原根的性质,对下标做变换,使得乘法变成加法,然后就有卷积性质了。n很大我们就在外面套一层快速幂即可。#include <bits/stdc++.h>using namespace std ;typedef long long LL ;typedef pair < int , int > pii ;typedef unsigne原创 2016-11-03 11:06:33 · 560 阅读 · 0 评论 -
【HDU】5751 Eades【FFT】
题目链接:Eades#include <stdio.h>#include <string.h>#include <math.h>#include <vector>#include <algorithm>using namespace std ;typedef long long LL ;typedef pair < int , int > pii ;#define clr( a , x原创 2016-10-08 19:48:22 · 508 阅读 · 0 评论 -
【Live Archive】4671 - K-neighbor substrings【FFT+后缀数组】
传送门:【Live Archive】4671 - K-neighbor substrings题目分析:和Ural 1996那题很像,都是通过将一个串反转后就可以将匹配变成卷积了。 由于从AA串中取出来的串是本质不同的,所以这里我用了后缀数组(用后缀数组纯粹是因为我懒= =)做了处理:处理出的heightheight数组,heightiheight_i表示字典序第ii小的后缀和字典序第i−1i-1小原创 2015-05-07 16:44:15 · 1361 阅读 · 0 评论 -
【codeforces】528D. Fuzzy Search【FFT】
传送门:【codeforces】528D. Fuzzy Search题目分析:首先,我们先来了解一下FFTFFT求字符串匹配的方法。问题:求BB串在AA串中匹配的次数。解法: 我们用aia_i表示串AA第ii个位置的字符,bjb_j表示串BB第jj个位置的字符。AA串用多项式表示为: A=∑ni=1xi=∑ni=1A(i)\qquad\qquad A = \sum_{i=1}^n x^i=\su原创 2015-05-07 19:55:48 · 2778 阅读 · 0 评论 -
【ural】1996. Cipher Message 3【FFT+KMP】
传送门:【ural】1996. Cipher Message 3题目大意:问至少将多少个AA串的字节的最低位取反使得BB串是AA串的子串。题目分析:可以发现,只要将BB串翻转一下,AA串和BB串的匹配就符合一个卷积公式了。令aia_i为A串第ii个字节的最低位,bjb_j为B串第jj个字节的最低位(ai,bj∈{0,1}a_i,b_j\in \{0,1\})。AA串用多项式表示为: A=∑ni=1原创 2015-05-07 14:55:53 · 1169 阅读 · 0 评论 -
【BNU】33943 Super Rooks on Chessboard 【FFT】
【BNU】33943 Super Rooks on ChessboardUVA上的题,然而我怎么会蠢到去UVA呢!(其实是百度首先跳出来的是BNU→\to_→\to)题目分析:设numxnumx为NN个车没有覆盖的行数,numynumy为NN个车没有覆盖的列数。 首先我们考虑没有主对角线覆盖这一条件时,总共的没有被覆盖的面积就是numx∗numynumx \ast numy。 现在我们考虑主对角原创 2015-04-29 15:27:29 · 1244 阅读 · 0 评论 -
【ZOJ】3874 Permutation Graph 【FFT+CDQ分治】
传送门:【ZOJ】3874 Permutation Graph#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std ;typedef long long LL ;#define clr( a , x ) memset ( a , x , sizeof a )原创 2015-04-29 22:22:50 · 1828 阅读 · 0 评论 -
【HDU】5197 DZY Loves Orzing 【FFT启发式合并】
传送门:【HDU】5197 DZY Loves Orzing题目分析:首先申明,我不会dpdp方程= =……这个东西给队友找出来了,然后我就是套这个方程做题的Qrz……对于这题,因为n2n^2个数互不相同,所以每一列都可以单独考虑。设dpnidp_ni表示长度为nn的排列,能恰好看见ii个人的方案数,根据队友的发现,dpnidp_ni就等于|sni||s_ni|,其中snis_ni是第一类Stirl原创 2015-04-30 15:56:11 · 1418 阅读 · 0 评论 -
【BNU】40719 Arithmetic Progressions【分块+FFT】
传送门:【BNU】40719 Arithmetic Progressions题目分析:用分块+FFT强行AC了这题…… 之前一直TLE……然后改了好久把姿势改的优美点了……终于过了……大概思路是:我们考虑分块,假设每一块的大小为S,一共分了B块然后我们分两种情况讨论: 1.第二个数在第i块,第一个数在(1~i-1)块内,第三个数在(i+1~B)块内。 2.至少两个数在同一块内。对于第一种情况,原创 2015-04-30 22:06:29 · 1050 阅读 · 0 评论 -
【HDU】1402 A * B Problem Plus 【FFT】
传送门:【HDU】1402 A * B Problem Plus题目分析:这就是大数乘法题,问两个大数相乘的结果,由于O(n2)O(n^2)的算法复杂度太大,所以我们用FFT来优化他。关于FFT网上资料很多,我就不多说啦。这是我做的第一道FFT,FFT是看算法导论学来的,感觉算导讲的很不错,简单易懂~原创 2015-04-28 11:13:57 · 832 阅读 · 0 评论 -
【HDU】4609 3-idiots 【FFT】
传送门:【HDU】4609 3-idiots原创 2015-04-28 18:01:30 · 1123 阅读 · 0 评论 -
【BNU】39676 Point Distance【FFT求矩阵中点对的欧几里德距离】
传送门:【BNU】39676 Point Distance题目分析:纠结了好久,终于搞定了……首先我们定义: Dx,y=∑n−1i=0∑n−1j=0Ci,jCi+x,j+y\qquad \qquad D_{x,y}=\sum_{i=0}^{n-1}\sum_{j=0}^{n-1} {C_{i,j}C_{i+x,j+y}}Dx,yD_{x,y}表示两个点对之间行距为x,列距为y的对数。然后我们将点映原创 2015-05-12 21:14:11 · 1171 阅读 · 0 评论 -
【Tinsen】A1493. 城市规划【简单无向连通图个数——NTT】
传送门:【Tinsen】A1493. 城市规划前言:今天很不在状态= =,NTT里面竟然同一个地方写错两次……而且脑补的时候明显比平时迟钝了很多……题目分析:首先我们可以轻易知道N个点能构成的无向图的个数:2C2n2^{C_n^2},令其等于d(N)d(N)。然后假设我们固定一个点,枚举这个点所在连通块的大小,这样我们得到N个点的无向连通图公式: dp[n]=d(n)−∑n−2i=0Cin−1dp原创 2015-05-15 21:31:41 · 2982 阅读 · 0 评论 -
【HDU】5958 New Signal Decomposition【离散对数下的FFT】
题目链接:【HDU】5958 New Signal Decomposition在此先感谢小q对我的指导,没有q老师的帮助,估计永远也做不出来了。首先我们考虑对这个式子做离散对数。令gg为pp的某个原根,则有: bi=∑p−1j=0aj⋅r(i,j)\quad b_i=\sum_{j=0}^{p-1}a_j\cdot r(i,j) bi=∑p−1j=0aj⋅2sin32πi⋅jp\quad b_i原创 2016-11-01 21:57:42 · 1253 阅读 · 1 评论