
FFT
clover_hxy
The secret oppotunities are hidden inside every failure....
展开
-
UOJ#34 多项式乘法(FFT模板题)
题目描述给你两个多项式,请输出乘起来后的多项式。输入格式第一行两个整数 nn 和 mm,分别表示两个多项式的次数。第二行 n+1n+1 个整数,分别表示第一个多项式的 00 到 nn 次项前的系数。第三行 m+1m+1 个整数,分别表示第一个多项式的 00 到 mm 次项前的系数。输出格式一行 n+m+1n+m+1 个整数,分别表示乘起来后的原创 2017-02-22 08:42:47 · 884 阅读 · 0 评论 -
bzoj 3160: 万径人踪灭 (FFT+manacher)
题目描述传送门题目大意: 从只含a,b的字符串中选出一个子序列,满足 1.位置和字符都关于某条对称轴对称 2.不能是连续的一段 求合法的子序列个数。题解不能是连续的一段,对于连续一段的答案可以用manacher求解. 关于位置和字符对称的问题,我们可以对于a,b分开考虑,要计算以一个位置为对称轴的对数。 设当前计算的字符为a,那么把所有是a的位置赋值成1,即f[i]=1f[i]=1 如果原创 2017-04-16 21:46:10 · 345 阅读 · 0 评论 -
bzoj 4555: [Tjoi2016&Heoi2016]求和 (NTT)
题目描述传送门题解这道题解决的关键是知道第二类斯特林数的通项公式 S(n,m)=1m!∑k=0m(−1)kC(m,k)(m−k)nS(n,m)={1\over m!}\sum_{k=0}^m (-1)^k C(m,k) (m-k)^n 然后将通项公式带入题目中的原式化简 f(n)=∑i=0n∑j=0iS(i,j)∗2j∗j!f(n)=\sum_{i=0}^n\sum_{j=0}^i S(i,j原创 2017-04-16 23:42:29 · 792 阅读 · 0 评论 -
bzoj 3513: [MUTC2013]idiots (FFT)
题目描述传送门题目大意:给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率。题解三角形的两边之和大于第三边。如果我们直接用这个计算实际上是不好计算的,因为上面的条件中两边必须是较小的两条边。 我们考虑他的补集。然后用总方案-不合法方案。所谓不合法方案就是两边之和小于第三边的。对于所有不合法的三角形,只可能有一种搭配不合法。 例如a+b<ca+b<c,那么一定不可能b+c<ab原创 2017-05-04 15:39:33 · 715 阅读 · 0 评论 -
HDU 5909 Tree Cutting (点分治+树形DP|FWT+树形DP)
题目描述传送门题目大意:给出一棵树,求异或和为[0..m-1]的非空连通子图的个数。题解1FWT+树形DP f[i][j]f[i][j]表示以i为根异或和为j的连通子树的个数(注意必须是i的子树中) f[x][jf[x][j^k]=f[x][jk]=f[x][j^k]+f[x][j]∗f[son][k]k]+f[x][j]*f[son][k] 这个转移方程的瓶颈在于f[x][j]∗f[son][原创 2017-05-25 10:15:39 · 1200 阅读 · 0 评论 -
FWT板子
感觉这东西用的不算多。所以先把板子记下来吧void FWT(LL *a,int n){ for (int i=1;i<n;i<<=1) for (int p1=i<<1,j=0;j<n;j+=p1) for (int k=0;k<i;k++) { LL x=a[j+k]; LL y=a[j+k+i]; a[j+k]=(x+y)%p;原创 2017-05-25 10:27:59 · 468 阅读 · 0 评论 -
bzoj 3456: 城市规划 (NTT+多项式求逆)
题目描述传送门题目大意:求n个点简单无向连通图数,其中任意点之间可以随意连边,不存在重边和自环。题解设f[n]f[n]表示n个点简单连通图个数(即1所属的连通块内有n个点) f[n]=2(n−1)∗n/2−∑i=0n−1Ci−1n−1∗f[i]∗2(n−i)∗(n−i−1)/2f[n]=2^{(n-1)*n/2}-\sum\limits_{i=0}^{n-1}{C_{n-1}^{i-1}*f[i]原创 2017-02-24 11:40:00 · 1248 阅读 · 6 评论 -
bzoj 4827: [Hnoi2017]礼物 (FFT)
题目描述传送门题目大意:给出两个串,可以旋转和整串权值增加c,求操作后最小的∑ni=1(xi−yi)2\sum_{i=1}^n (x_i-y_i)^2题解先考虑不增加c。 ∑ni=1(xi−yi)2\sum_{i=1}^n (x_i-y_i)^2 =∑ni=1x2i+y2i−∑ni=12xiyi=\sum_{i=1}^n x_i^2+y_i^2 - \sum_{i=1}^n 2x_iy_i原创 2017-06-12 08:31:36 · 414 阅读 · 0 评论 -
bzoj 3509: [CodeChef] COUNTARI (FFT+分块)
题目描述传送门题目大意:给定一个长度为N的数组A[],求有多少对i, j, k(1<=i题解对序列进行分块。然后分情况讨论。 (1)i,j,k在同一个块中,从左向右顺序枚举i,j,对于j后面的数字出现情况用cnt[i]数组动态维护,每次计算答案的时候加上cnt[2∗a[j]−a[i]]cnt[2*a[j]-a[i]] (2)i,j在同一个块中,k在另一个块中或者j,k在同一个块中,i在另一个块中原创 2017-06-12 10:36:11 · 381 阅读 · 0 评论 -
COGS 2294. [HZOI 2015] 释迦 (FFT mod any prime)
题目描述传送门题目大意:给两个次数界为n的多项式,求这两个多项式的乘积,输出前x的0次项到n-1次项的系数 mod 23333333题解NTT只能求在FFT模数下的值。对于任意模数的题来说,我们可以选择三个FFT模数分别做NTT,最后用中国剩余定理合并。 卷积后每个数可以达到102310^{23}左右,所以我们需要选择三个乘积大于102310^{23}的FFT模数。合并的时候1023>26410^原创 2017-06-12 16:09:56 · 658 阅读 · 0 评论 -
bzoj 3771: Triple (容斥原理+生成函数+FFT)
题目描述传送门题目大意:有价值不同的n个物件,求从中选取1-3件物品,能组成多少种不同的价值,已经每种价值的方案数。题解容斥原理+生成函数+FFT代码#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#define N 200003#define pi acos(-1)原创 2017-04-17 20:51:00 · 642 阅读 · 0 评论 -
cogs 2259. 异化多肽 (生成函数+NTT)
题目描述传送门题目大意:M种氨基酸,已知其相对分子质量分别为C1,C2,C3……,经过精密的脱水缩合后形成了大量各种各样的肽链。需要预测有多少种多肽链水解后相对分子质量和为N。(A-B-C与C-B-A两条肽链视为不同)题解设生成函数A(x),序列中的每一位{ai}表示相对分子质量为i的氨基酸有多少个。 生成函数B(x),序列中的每一位{bi}表示相对分子质量和为i的肽链有多少种。 那么容易得出B原创 2017-04-18 07:32:23 · 581 阅读 · 0 评论 -
bzoj 2179: FFT快速傅立叶 (FFT)
2179: FFT快速傅立叶Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 3148 Solved: 1626[Submit][Status][Discuss]Description给出两个n位10进制整数x和y,你需要计算x*y。Input第一行一个正整数n。 第二行描述一个位数为n的正整数x。 第三行描述一个原创 2017-02-22 09:29:43 · 512 阅读 · 0 评论 -
bzoj 3527: [Zjoi2014]力 (FFT)
题目描述传送门给出nn个数qiq_i,给出FjF_j的定义如下: Fj=∑i<jqiqj(i−j)2−∑i>jqiqj(i−j)2F_j=\sum\limits_{i < j}{q_iq_j \over (i-j)^2}-\sum\limits_{i>j}{q_iq_j\over(i-j)^2} 令Ei=Fi/qiE_i=F_i/q_i ,求EiE_i输入第一行一个整数n。 接下来n行每行输入原创 2017-02-22 15:40:43 · 1068 阅读 · 0 评论 -
bzoj 2629: binomial (FFT+DP+Lucas定理+短除法)
题目描述传送门题目描述:对于给定的n和p,求对于所有的0<=i<p0<=i<p,满足C(n,k)% p=iC(n,k)\% \space p =i的k的个数 注:C(n,k)=n!k!∗(n−k)!C(n,k)={n!\over{k!*(n-k)!}} n<=p10,p=51061n<=p^{10},p=51061题解这道题因为n很大所以不能直接计算组合数。 但是我们可以利用Lucas定理进原创 2017-03-02 14:46:52 · 579 阅读 · 0 评论 -
codeforces 528D. Fuzzy Search (FFT优化DP)
题目描述传送门题目大意:给出一个母串和一个模板串,求模板串在母串中的匹配次数。 匹配时,如果用s[i]匹配t[j],那么只要s[i-k]-s[i+k]中有字母与t[j]相同即可算作匹配成功。其中s[i]表示母串的第i位,t[j]表示模板串的第j位。题解如果数据范围小的话,这题就是一个DP f[i][j]=f[i-1][j-1]&mp[i][t[j]]表示母串的第i位匹配到模板串的第j位是否可以匹原创 2017-02-23 07:57:59 · 1247 阅读 · 0 评论 -
bzoj 4503: 两个串 (FFT+DP)
题目描述传送门题目大意:带通配符的字符串匹配,求询问串从母串中的匹配次数。 母串只包含小写字母,询问串包含小写字母和通配符?,长度<=100000题解刚开始想了一个比较傻的方法,发现TLE了,奇慢无比。 就是对于每个字符分别进行匹配。枚举当前字符,如果i母串的第i位为当前字符,那么f[i]=1;如果询问串的第j位为当前字符,g[j]=1.然后我们将询问串翻转,那么h[i]=∑nj=1f[i−j]原创 2017-03-03 20:00:28 · 874 阅读 · 0 评论 -
bzoj 2194: 快速傅立叶之二 (FFT)
2194: 快速傅立叶之二Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1178 Solved: 682[Submit][Status][Discuss]Description请计算C[k]=sigma(a[i]*b[i-k]) 其中 k Input第一行一个整数N,接下来N行,第i+2..i+N-1行原创 2017-02-22 10:55:04 · 377 阅读 · 0 评论 -
cogs 2287. [HZOI 2015]疯狂的机器人 (NTT优化DP)
题目描述[HZOI 2015]疯狂的机器人 ★★★ 输入文件:crazy_robot.in 输出文件:crazy_robot.out 简单对比 时间限制:1 s 内存限制:512 MB 【题目描述】现在在二维平面内原点上有一只机器人 他每次操作可以选择向右走,向左走,向下走,向上走和不走(每次如果走只能走一格) 但是由于本蒟蒻施展的大魔法,机器人不能走到横坐标是负数或者原创 2017-02-23 22:00:10 · 1179 阅读 · 0 评论 -
bzoj 3992: [SDOI2015]序列统计 (NTT+快速幂+DP)
题目描述传送门题目大意:给定元素在[0,m)内的整数集合S,求有多少个长度为n的数列满足所有元素属于S且mod m下的积为x,元素可以重复出现。题解这道题看到之后容易想到dp f[i][j]f[i][j]表示的是选到第i个数,乘积%m的方案数 f[i][j]=∑i=1|s|f[i−1][j∗inv[S[i]]f[i][j]=\sum\limits_{i=1}^{|s|}f[i-1][j*inv[原创 2017-02-22 20:51:35 · 1562 阅读 · 0 评论 -
bzoj 4259: 残缺的字符串 (FFT)
题目描述传送门题目大意:给出两个带通配符的字符串,求匹配的个数。题解FFT裸题,通配符的位置赋值成0 f[i]=∑j=1n(g[j]−h[i−j])2∗g[j]∗h[i−j]f[i]=\sum\limits_{j=1}^n (g[j]-h[i-j])^2*g[j]*h[i-j] 这个式子拆开后,做三次FFT就可以了代码#include<iostream>#include<cstdio>#in原创 2017-03-17 09:58:16 · 699 阅读 · 0 评论 -
51nod 1348 乘积之和(NTT+分治)
题目描述传送门题目大意:给出由N个正整数组成的数组A,有Q次查询,每个查询包含一个整数K,从数组A中任选K个(K <= N)把他们乘在一起得到一个乘积。求所有不同的方案得到的乘积之和,由于结果巨大,输出Mod 100003的结果即可题解一次卷积的上限大概是101610^16左右,选择两个10910^9左右的NTT模数,每次做到时候两个分别做,再用中国剩余定理合并即可。 分治,f[i]表示选择i个原创 2017-06-12 19:04:51 · 947 阅读 · 0 评论