ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FFT/NTT学习笔记

2022-04-06 18:34:22  阅读:184  来源: 互联网

标签:... FFT 大于号 sum cap NTT 笔记 dp


这是很大的东西,这里只是初学的一些简单题罢了......

以下不区分 FFT 与 NTT

分治 FFT

我们知道,常规的卷积是这样:

\[h_{i}=\sum_{j=0}^{i}f_jg_{i-j} \]

然而很多时候,我们的数列是由自身递推而来的,或者说,形如:

\[f_{i}=\sum_{j=0}^{i-1}f_{j}g_{i-j} \]

运用 cdq 分治 + FFT ,我们可以在 \(O(n \log^2 n)\) 的时间内求出 \(f_1\sim f_{n}\)(\(f_0\) 应该作为初始项给出)。

模板:洛谷P4721 分治FFT

1. ABC213H Stroll

其实看上去很像矩乘,但边权太大了...

依旧设 \(f(i,j)\) 是 \(1\rightarrow i\) 的长度为 \(j\) 的路径数,然后我们发现它的转移十分像卷积。但是会用到之前的 \(f\)。所以分治 FFT 一下即可。时间复杂度 \(O(m T\log^2T)\)。

2. LOJ575 不等关系

好题。LOJ的官方题解讲得很好了。

此类问题的一个常见套路是 \(dp\) :我们从小到大地添加元素进去。但是在本题中没有什么前途。所以得寻找新的方法。

排列计数的另一常见套路是容斥,我们考虑如果只指定某些相邻位置是升序怎么做。换言之要求这个排列被划分成了若干升序段。设段长分别为 \(a_1,a_2,...,a_k\) 那么方案数就是 \(\frac{n!}{\prod a_i!}\)。

本题中,设有 \(k\) 个大于号。设条件 \(A_i\) 代表:第 \(i\) 个大于号的左边大于右边。则我们求的是:

\[|A_1\cap A_2 \cap...\cap A_k|=\sum_{j=0}^{k}(-1)^{j}|\overline{A_{i_1}}\cap...\cap\overline{A_{i_j}}| \]

右边的部分,就只是要求部分大于号和所有小于号的两遍都满足左小于右,其余地没有限制。容易发现方案数就是开始提到的 \(\frac{n!}{\prod_{a_i!}}\)。

此时考虑 dp 来算容斥式子。首先 \(n!\) 可以提出来,所以我们只关心 \((-1)^{j}\) 这个容斥系数,以及分母。

设 \(dp(i)\) 是前 \(i\) 个 的答案。\(dp(0)=1\) 显然。然后我们发现,这里我们不是要枚举哪些数在集合里,而是枚举哪些数不在集合里(这些位置把整个排列划分成了若干上升段)。具体地:

\[dp(i)=\sum_{j=0}^{i-1}[j=0 \lor s_{j}=>]\times (-1)^{cnt_{i-1}-cnt_{j}}\times dp(j)\times \frac{1}{(i-j)!} \]

其中 \(cnt_i\) 是前 \(i\) 个 符号 里大于号的个数。

我们发现这还是 \(n^2\) 的。但是明显是分治 FFT 的式子,于是优化到 \(O(n\log^2 n)\)。

标签:...,FFT,大于号,sum,cap,NTT,笔记,dp
来源: https://www.cnblogs.com/Cry-For-theMoon/p/16107831.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有