FFT专练
就多项式乘法这个地方不太熟 再多巩固一下.
LINK:[ZJOI2014力](https://www.luogu.com.cn/problem/P3338)
把$(j-i)^2$看成一个函数 可以发现是一个卷积 FFT优化即可.
LINK:[TJOI2017DNA](https://www.luogu.com.cn/problem/P3763)
这道题还是FFT匹配字符串的应用,怎么匹配我不再赘述 其实就是翻转一下相乘一下...
考虑怎么求答案 可以最多有三个位置不同 我们很难处理这个问题。。
由于只有4种字符 我们逐一进行FFT 求值 最后某个位置累和LINK:[任意模数NTT](https://www.luogu.com.cn/problem/P4245)
我对多项式什么的 一点都不敏感 反而越发的生疏 看来得学一下生成函数了 这样我的代数水平估计会上涨很多 对。
任意的模数NTT 这就越发的难搞 我们这个时候一般考虑选取几个有原根的模数 并且三个模数的乘积大于最终结果的理论最大值 进行三次NTT 再把每一项用中国剩余定理给合并起来 再搞9次DFT 为什么是9次?我也不太懂。。。
这里利用的做法是拆系数FFT... 由于答案的上界为$10^9*10^9*10^5=10^{23}$我们只需要搞精度足够高的多项式乘法就能保证不掉精。
首先把每个数字拆成 $a*2^15+b$的形式 那么显然 $a,b\leq 2^15$
有 $c_1*c_2=(a_1*2^{15}+b_1)(a_2*2^{15}+b_2)\to =a_1*a_2*2^{30}+(a_1*b_2+a_2*b_1)*2^{15}+b_1*b_2$
这样我们只需要7次FFT 但是众所周知 FFT常数大的很 所以 还需要继续化简..
懒的优化 就这样信仰跑吧... 当然 我的精度暴力 开long double 才过 不太清楚为什么 可能精度是刚好卡边的 精度不够.. long double nb。
[SDOI2015序列统计](https://www.luogu.com.cn/problem/P3321)
好题,首先要知道一个暴力 f[i][j]...
再者 我们发现 转移方程 $f[i+1][j*k]+=f[i][j];\to f[i+1][c]+=f[i][j] (j\cdot k \mod m==c)$
这个东西已经是dp的复杂度下界了 状态 空间 转移没有再优化的余地了 遗憾的是这是一个 $nm^2$的做法。
其实要是 说优化我们还有一种对于这种式子进行优化的方法 即快速幂优化法。
f[i][j]和f[i][k]进行合并 我们不难得到f[i*2][c] 对 第一项进行快速幂即可。
这样我们就得到了一个 $m^2logn$的优秀做法 但是 还是通过不了这道题目。
再观察转移 乘法变加法 我们发现了什么 卷积...
于是我们考虑如何把乘法变成加法这还是有点难度的。
指数函数和对数函数都能使得乘法变成加法。
我们要设定一个很棒的映射 使得 原来的乘法运算完全变成加法之间的运算。对数指数都可以 下面我考虑一下指数。
也就是我们期望$a*b\mod m==c \to (A+B)\mod (m-1)==C$
其中A,B,C为$k^A==a,k^B==b...$不难发现k一定是m的原根不然不能做到一一映射。
考虑如果是原根会出现这样的效果么 可以发现是正确的所以我们把每个数字映射到指数上即可.
这个非常严肃的问题 原根怎么求?
我们可以根据定义求但是太耗时 不妨我们枚举原根G 然后对phi(p)分解质因数如果g满足对于所有$p_i$有$g^{\frac{\phi(p)}{p_i}}\mod p!=1$
那么这个数字就是原根。值得一提的是这道题的模数为1004535809 这玩意是一个费马质数 即 NTT常用模数...
[AH2017礼物](https://www.luogu.com.cn/problem/P3723)
这道题还是很好推的 列出来式子 推一发 很容易发现是一个卷积 FFT掉精度很严重 不如使用NTT...
其实原本我是 mnlogn准备暴力...但其实把c带进去发现一次NTT即可...
值得一提的是 我又没有很好的理解题目意思 以为是只有一个手环可以加c 两个都是可以的。我的语文也是服了..
[luogu4841城市规划](https://www.luogu.com.cn/problem/P4841)
本来是打算练习EGF的 但是看题解也没能看懂EGF的做法是为什么也不会多项式exp 所以就咕了。
考虑不用EGF来做这道题好了。
题目的意思是求n个点的一张有标号无向联通图的数目。这是基于无向联通图是基于一棵树再随便加几条边形成的概念.
设f[i]表示 由i个点组成的无向联通图的个数。显然 $f[i]=\sum_{s=1}^{i-1}f[s]C_{i-1}^s*(2^s-1)f[i-s]$
含义不再多说 但是会出现问题 方案可能算重,因为我们可能枚举到了1生成2也可能枚举到了2生成了1
总之多种方案被同时枚举到了 原因是 前后可能出现翻转什么的 当然也不可能最后除以二什么的 没有那么简单...有些方案重复了 有些方案没有重复。
重新更改dp式 我们发现 i这个点虽然沟通了若干个联通块我们强制让其先让其沟通的式1所在的连通块。随着1所在的连通块逐渐变大可以保证前后不可能重复枚举到,是不是很妙哇。那么有 $f[i]=\sum_{s=1}^{i-1}f[s]C_{i-2}^{s-1}*(2^s-1)f[i-s]$
很显然 这是一个分治FFT 复杂度nlogn^2.
不太行这个复杂度。我们考虑容斥来降低时间复杂度 考虑一个生成图的方案数$2^{C_n^2}$ 用这个东西容斥设为g_i表示i个点的图的数量.
$f_i=g_i-...$要减去不合法的方案数 怎么算不合法的,考虑不合法等于部分合法+完全不合法。
或者还是说 不合法方案显然由几个连通块构成我们暴力枚举其中的一个连通块s,剩下的方案显然为$g_{i-s}$
可以发现那个联通块s的方案数为$f_s$值得一提的是这里还是存在刚才的那个问题 我们枚举到1 算出的2 和枚举到2算出的1这两者是等价的,所以我们故技重施还是采用枚举1所在的连通块的方法来去重。
所以$f_i=g_i-\sum_{s=1}^{i-1}C_{i-1}^{s-1}f_sg_{i-s}$发现这个式子还是可以分治FFT来做的。
但是 和刚刚一样还没有那么的清晰 再继续往下推一波..
$f_i=g_i-\sum_{s=1}^{i-1}\frac{(i-1)!}{(s-1)!(i-s)!}f_sg_{i-s}$
发现展开也没啥用(~~不如再合上~~)不过有利于我们分治FFT...
那就合上吧 再两边都除以(i-1)!
可以得到 $\frac{f_i}{(i-1)!}=\frac{g_i}{(i-1)!}-\frac{\sum_{s=1}^{i-1}C_{i-1}^{s-1}f_sg_{i-s}}{(i-1)!}$
合并一下$\frac{\sum_{s=1}^{i}C_{i-1}^{s-1}f_sg_{i-s}}{(i-1)!}=\frac{g_i}{(i-1)!}$
约分一下$\sum_{s=1}^{i}\frac{f_s}{(s-1)!}\frac{g_{i-s}}{(i-s)!}=\frac{g_i}{(i-1)!}$
分别 设A B C等于上述三个多项式 那么显然 $A\cdot B=C\to A=C\cdot B^{-1}$
B C这两个多项式的值都很好求 求一波逆即可.但是我忘了逆怎么求了 这里先写一发 分治FFT算了...
分治FFT都写了3h 我是sb 自闭了.
FFT专练的更多相关文章
- 10-19 dp专练
dp专练,终于克服了一次自己对dp的恐惧,磕出来一道题. 得分情况: T1:0 T2:0 T3:0 emmmm,磕出来的题是T2,但是因为初始化和int long long的原因爆零了 T1:n只狼排 ...
- P1251 递推专练3
递推专练3 描述 Description 圆周上有N个点.连接任意多条(可能是0条)不相交的弦(共用端点也算相交)共有多少种方案? 输入格式 Input Format 读入一个数N.<=N< ...
- 8.1搜索专练DFS和BFS
这是第一次全部做出来的依次练习了,有一些都是做过两遍了的,但是还是错了几回,更多时候我还是应该多注意下细节,就好像章爷笑我 的一样,像什么vis[]标记没清0,什么格式错误,还有什么题目没看清,还是的 ...
- Contest 7.21(贪心专练)
这一次都主要是贪心练习 练习地址http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26733#overview Problem APOJ 13 ...
- contest7.20(暴力专练)
此次练习的地址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26732#overview 密码 acmore Problem A(P ...
- java 集合专练
handsomecui的blog地址为:http://www.cnblogs.com/handsomecui/ 本人网站为:handsomecui.top 引言:本次主要练习单列集合:Collecti ...
- 2016.4.9 NOI codevs动态规划专练
1.NOI 最大子矩阵 1:最大子矩阵 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...
- 2016.4.3 动态规划NOI专练 王老师讲课整理
1.6049:买书 总时间限制: 1000ms 内存限制: 65536kB 描述 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元. 问小明有多少种买书方案?(每种书可购买 ...
- cojs.tk(所有题目来源) 树状数组专练
1.求和问题 ★ 输入文件:sum.in 输出文件:sum.out 简单对比时间限制:1.2 s 内存限制:128 MB [问题描述] 在一个长度为n的整数数列中取出连续的若干 ...
随机推荐
- 前段人员必藏的7 个 CSS 好用的属性绝对干货
学习CSS是构建好看网页的一种方式. 但是,在学习过程中,我们倾向于(大部分时间)限制自己,一遍又一遍地使用相同的属性. 毕竟,我们是一种习惯性的动物,我们会使用自己习惯且熟悉的东西. 因此,在这篇文 ...
- day62 作业
熟练使用无名有名分组 urls.py url(r'^edit/(\d+)/',views.edit_user,name='edit'), views.py def edit_user(request, ...
- Scala 面向对象(八):特质(接口) 一
1 Scala接口的介绍 从面向对象来看,接口并不属于面向对象的范畴,Scala是纯面向对象的语言,在Scala中,没有接口. Scala语言中,采用特质trait(特征)来代替接口的概念,也就是说, ...
- Scala 面向对象(四):import
1 Scala引入包基本介绍 Scala引入包也是使用import, 基本的原理和机制和Java一样,但是Scala中的import功能更加强大,也更灵活. 因为Scala语言源自于Java,所以ja ...
- 《python编程从入门到实践》2.3字符串
书籍<python编程从入门到实践> 2.3字符串 知识模块 print()函数,函数名称突出为蓝色,输出括号内的变量或者字符创. 变量名的命名:尽量小写字母加下划线并且具有良好的描述性, ...
- 尝鲜刚发布的 SpringFox 3.0.0,以前造的轮子可以不用了...
最近 SpringFox 3.0.0 发布了,距离上一次大版本2.9.2足足有2年多时间了.可能看到这个名字,很多读者会有点陌生.但是,只要给大家看一下这两个依赖,你就知道了! <depende ...
- Cooperative Groups
Cooperative Groups 目录 Cooperative Groups 简介 块内组 thread_block tiled_partition Thread Block Tiles Coal ...
- ztree : checkbox 选中/不选中时动态添加/删除DOM元素
先上代码. var IDMark_Switch = "_switch", IDMark_Icon = "_ico", IDMark_Span = "_ ...
- scss : div水平垂直居中
scss 是一个很好用的css预处理语言,有很多很好的特性. 比如 mixin. 我们可以像使用函数那样使用mixin. 比如写一个div水平垂直居中. 上代码. @mixin absolute_ce ...
- [redis] -- 缓存雪崩和缓存穿透、缓存击穿问题解决方案篇
缓存雪崩 缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉 解决方案 事前:尽量保证整个redis集群的高可用性,发现机器宕机尽快补上.选择合适的内存淘 ...