数学-FFT/NTT/FWT
Maxwei_wzj
AFO
展开
-
【HDU4609】3-idiots-FFT+生成函数
测试地址:3-idiots 题目大意:有nnn条线段,问从里面随机取333条线段,能组成三角形的概率。 做法:本题需要用到FFT+生成函数。 首先,求概率就是用合法方案数除以总方案数,这里总方案数显然是n(n−1)(n−2)/6n(n−1)(n−2)/6n(n-1)(n-2)/6,因此我们只需要求合法方案数。最暴力的思路就是O(n3)O(n3)O(n^3)枚举,但是这样显然无法通过本题,需要...原创 2018-02-15 21:41:11 · 803 阅读 · 0 评论 -
【BZOJ4036】按位或(HAOI2015)-Min-Max容斥+FWT
测试地址:按位或 做法:本题需要用到Min-Max容斥+FWT。 因为一直是或,所以一个位置上如果有了111,这个111就会一直有下去,那么问题就变成了,每次选择一个子集,问所有点都被选过的期望次数。所有点都没选过的期望次数,也就相当于这些点中最后一个点被选的期望次数,容易想到Min-Max容斥: E[max{S}]=∑T∈S(−1)|T|+1E[min{T}]E[max{S}]=∑T∈S(...原创 2018-07-06 18:41:42 · 390 阅读 · 0 评论 -
【LuoguP3803】多项式乘法-FFT/NTT模板题(附带FFT/NTT简单介绍)
测试地址:多项式乘法 做法1:本题需要用到大名鼎鼎的FFT——快速傅里叶变换(Fast Fourier Transform)。 FFT是一个……计算向量卷积的东西(大概吧,才疏学浅,还请各位大佬见谅),而向量卷积,说白了就是多项式乘法。在学习FFT之前,先简单介绍DFT(离散傅里叶变换)和IDFT(逆离散傅里叶变换)的概念,简单来说,DFT是将多项式由系数表示法变为点值表示法的过程,而IDFT...原创 2018-02-14 17:29:23 · 553 阅读 · 1 评论 -
【BZOJ3992】序列统计(SDOI2015)-NTT+循环卷积+快速幂
测试地址:序列统计 做法:本题需要用到NTT+循环卷积+快速幂。 这个题我们很快就想出状态转移:令f(i,j)f(i,j)f(i,j)为前iii个数的乘积模mmm的结果为jjj的数列方案数,那么有: f(i,j)=∑0≤k<m∑l∈S[(k×l)%m=j]f(i−1,k)f(i,j)=∑0≤k<m∑l∈S[(k×l)%m=j]f(i−1,k)f(i,j)=\sum_{0\le k...原创 2018-02-21 12:07:04 · 626 阅读 · 0 评论 -
【BZOJ4827】礼物(AHOI&HNOI2017)-FFT
测试地址:礼物 做法:本题需要用到FFT。 为了方便讨论,我们把装饰物的编号设为000~n−1n−1n-1,并把所有的调整操作都仅视为对第一串手环进行,显然这样并不失一般性。 不难看出,第一串手环旋转kkk位,并增加ccc的亮度(如果原操作是对第二串手环亮度增加ccc,那么这里就是增加−c−c-c)的差异值为: ∑n−1i=0(x(i+k)%n+c−yi)2∑i=0n−1(x(i+k)%n...原创 2018-02-22 21:44:42 · 307 阅读 · 0 评论 -
【BZOJ3527】力(ZJOI2014)-FFT
测试地址:力 做法:本题需要用到FFT。 把题目所给式子中的qjqjq_j除掉,我们发现题目要求: Ej=∑i<jqi(i−j)2−∑i>jqi(i−j)2Ej=∑i<jqi(i−j)2−∑i>jqi(i−j)2E_j=\sum_{ij}\frac{q_i}{(i-j)^2} 然而本人自己做到这里就并不会推了(即使在知道要使用FFT的情况下)。在本人看了题解之后,发...原创 2018-02-20 22:28:25 · 234 阅读 · 0 评论 -
【BZOJ3160】万径人踪灭-FFT+Manacher
测试地址:万径人踪灭 做法:本题需要用到FFT+Manacher。 这道题要求不连续的回文子序列数量,显然这个数量等于所有回文子序列数量减去连续的回文子序列数量,后面的部分很显然可以用Manacher算法求出,那么现在的问题就是要求出所有回文子序列数量。 对于每条对称轴,都存在一个数kkk,使得任意满足i+j=ki+j=ki+j=k的数对i,ji,ji,j,有ai+ajai+aja_i+a_...原创 2018-03-09 21:23:38 · 234 阅读 · 0 评论 -
【HDU5730】Shell Necklace-CDQ分治+FFT(分治FFT)
测试地址:Shell Necklace 题目大意:一串链形贝壳项链(不是环形),有aiaia_i种方案装饰连续iii个贝壳,问装饰整串项链有多少种方案。 做法:本题需要用到CDQ分治+FFT(分治FFT)。 首先令f(i)f(i)f(i)为装饰长为iii的项链的方案数,特殊地,令f(0)=1f(0)=1f(0)=1,那么我们很快能得出状态转移方程: f(i)=∑ij=1f(i−j)ajf(...原创 2018-04-08 13:34:31 · 342 阅读 · 0 评论 -
【BZOJ4259】残缺的字符串-FFT
测试地址:残缺的字符串 题目大意:给定两个带通配符的字符串A,BA,BA,B,问AAA在BBB中能匹配的所有位置。 做法:本题需要用到FFT。 这题看上去是一个字符串题,然而KMP算法在带通配符的字符串匹配中并不好使,这时候就要分析一下两个带通配符的串匹配的条件。 两个字符匹配当且仅当两个字符相同或其中一个为通配符,如果令通配符为000,那么我们可以定义两个字符a,ba,ba,b的差异值为...原创 2018-04-01 10:13:26 · 274 阅读 · 0 评论 -
【HDU5322】Hope-分治NTT
测试地址:Hope 题目大意:定义一个排列AAA的价值为:对于所有iii,找到一个最小的jjj使得j>ij>ij>i并且Aj>AiAj>AiA_j>A_i,在i,ji,ji,j间连一条边,令所有连通块中点数的乘积为PPP,那么排列的价值为P2P2P^2。求所有长为nnn的排列的价值之和。 做法:本题需要用到分治NTT。 首先,我们知道(∏pi)2=∏p2i(∏pi)2...原创 2018-04-10 16:38:35 · 251 阅读 · 0 评论 -
【BZOJ5306】染色(HAOI2018)-容斥原理+NTT
测试地址:染色 做法:本题需要用到容斥原理+NTT。 好吧,我承认以下的推导过程是借(chao)鉴(xi)这位大佬的,Orz。 要求恰有i(0≤i≤E,E=min(⌊nS⌋,m))i(0≤i≤E,E=min(⌊nS⌋,m))i(0\le i\le E,E=\min(\lfloor \frac{n}{S}\rfloor,m))种颜色出现SSS次的方案数,其实就是要求其他m−im−im-i种颜色...原创 2018-05-01 10:14:16 · 642 阅读 · 0 评论 -
【BZOJ4555】求和(TJOI&HEOI2016)-第二类斯特林数+NTT
测试地址:求和 做法:本题需要用到第二类斯特林数+NTT。 从题目中给的递推式或者根据组合数学的知识,第二类斯特林数S(i,j)S(i,j)S(i,j)的组合意义是:将iii个有区别的球放入jjj个无区别的盒子的方案数。由此我们可以得到通项公式: S(i,j)=1j!∑jk=0(−1)kCkj(j−k)iS(i,j)=1j!∑k=0j(−1)kCjk(j−k)iS(i,j)=\frac{1}...原创 2018-05-01 13:40:09 · 294 阅读 · 0 评论 -
【BZOJ3456】城市规划-多项式求逆
测试地址:城市规划 题目大意:求nnn个点带标号简单无向连通图(即无重边,无自环)的数目。 做法:本题需要用到多项式求逆。 如果不要求连通,这题就是水题了,答案显然为2C2n2Cn22^{C_n^2}(即枚举每条边选或不选)。 然而这题显然没那么简单,我们令f(n)f(n)f(n)为我们要求的答案,g(n)=2C2ng(n)=2Cn2g(n)=2^{C_n^2},有如下递推式: g(n)...原创 2018-06-20 19:17:27 · 300 阅读 · 0 评论 -
【BZOJ3451】Normal-概率期望+点分治+NTT
测试地址:Normal 题目大意:将点分治中找分治重心的过程,变成随机在当前块中取一个点,点分治的每一步骤(即处理一块)消耗的时间为块的大小,问总消耗时间的期望。 做法:本题需要用到概率期望+点分治+NTT。 首先根据期望的线性性,不难想到分开计算每个点被计算的期望次数,累加起来就是答案。而每个点被计算的次数,等于它在点分树上的深度(根深度为111),那么对于一个点xxx,某点yyy(可以是...原创 2018-06-07 22:27:33 · 351 阅读 · 0 评论 -
【LOJ2541】猎人杀(PKUWC2018)-容斥+级数+分治NTT
测试地址:猎人杀 做法:本题需要用到容斥+级数+分治NTT。 要求111号最后一个被射杀,其实就是要求所有人都不能在111号后被射杀。这种要求全部条件满足求方案数/概率的情况,就要考虑容斥,即枚举一个集合SSS,计算强制这SSS个人在111号后被射杀的概率p(S)p(S)p(S),那么答案就等于: ans=∑S(−1)|S|p(S)ans=∑S(−1)|S|p(S)ans=\sum_S(-1...原创 2018-06-16 17:31:16 · 1425 阅读 · 0 评论 -
【BZOJ4589】Hard Nim-快速幂+FWT
测试地址:Hard Nim 做法:本题需要用到快速幂+FWT。 我们知道Nim游戏先手必败的条件为,所有堆中的石子数异或和为000,于是我们就是要求石子数异或和为000的方案数。我们直观上感觉这个东西很像生成函数的卷积,但是又不是一般的卷积,因为这里并不是石子数的和,而是异或和。 这时我们要重新定义卷积。令向量ccc为向量aaa和bbb关于运算⊕⊕\oplus的卷积,则ccc为: ck=∑...原创 2018-07-02 12:21:23 · 468 阅读 · 0 评论 -
【HDU6057】Kanade's Convolution-FWT
测试地址:Kanade’s Convolution 题目大意:给定两个长为2m(m≤19)2m(m≤19)2^m(m\le 19)的向量A,BA,BA,B,计算向量CCC,其中: Ck=∑i&nbsp;and&nbsp;j=kAi&nbsp;xor&nbsp;j⋅Bi&nbsp;or&nbsp;jCk=∑i&nbsp;and&nbsp;j=kAi&nbsp;xo原创 2018-07-02 22:30:33 · 276 阅读 · 0 评论 -
【LuoguP4233】射命丸文的笔记-多项式求逆
测试地址:射命丸文的笔记 做法:本题需要用到多项式求逆。 首先,要求存在哈密顿回路的竞赛图的哈密顿回路期望数量,就是用哈密顿回路的总数除以存在哈密顿回路的竞赛图数量。 要考虑所有竞赛图的哈密顿回路数量之和,反过来考虑对于所有哈密顿回路,出现某回路的图的数量之和。显然对于一个回路,包含它的竞赛图数量是2n(n−3)22n(n−3)22^{\frac{n(n-3)}{2}},而一个哈密顿回路实际...原创 2018-07-09 23:04:53 · 254 阅读 · 0 评论