就多项式乘法这个地方不太熟 再多巩固一下.

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专练的更多相关文章

  1. 10-19 dp专练

    dp专练,终于克服了一次自己对dp的恐惧,磕出来一道题. 得分情况: T1:0 T2:0 T3:0 emmmm,磕出来的题是T2,但是因为初始化和int long long的原因爆零了 T1:n只狼排 ...

  2. P1251 递推专练3

    递推专练3 描述 Description 圆周上有N个点.连接任意多条(可能是0条)不相交的弦(共用端点也算相交)共有多少种方案? 输入格式 Input Format 读入一个数N.<=N< ...

  3. 8.1搜索专练DFS和BFS

    这是第一次全部做出来的依次练习了,有一些都是做过两遍了的,但是还是错了几回,更多时候我还是应该多注意下细节,就好像章爷笑我 的一样,像什么vis[]标记没清0,什么格式错误,还有什么题目没看清,还是的 ...

  4. Contest 7.21(贪心专练)

    这一次都主要是贪心练习 练习地址http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26733#overview Problem APOJ 13 ...

  5. contest7.20(暴力专练)

    此次练习的地址:  http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26732#overview 密码 acmore Problem A(P ...

  6. java 集合专练

    handsomecui的blog地址为:http://www.cnblogs.com/handsomecui/ 本人网站为:handsomecui.top 引言:本次主要练习单列集合:Collecti ...

  7. 2016.4.9 NOI codevs动态规划专练

    1.NOI 最大子矩阵 1:最大子矩阵 总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...

  8. 2016.4.3 动态规划NOI专练 王老师讲课整理

    1.6049:买书 总时间限制:  1000ms 内存限制:  65536kB 描述 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元. 问小明有多少种买书方案?(每种书可购买 ...

  9. cojs.tk(所有题目来源) 树状数组专练

    1.求和问题 ★   输入文件:sum.in   输出文件:sum.out   简单对比时间限制:1.2 s   内存限制:128 MB [问题描述]     在一个长度为n的整数数列中取出连续的若干 ...

随机推荐

  1. POJ 3463 Sightseeing 题解

    题目 Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every day the ...

  2. BZOJ1854 连续攻击游戏 题解

    题目 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多 ...

  3. 【第五空间智能安全大赛】hate_php WriteUp

    环境:https://www.ctfhub.com/#/challenge 打开题目可以看到源码: 阅读源码发现过滤掉了f l a g . p h / ; " ' ` | [ ] _ =这些 ...

  4. Python-用xlrd模块读取excel,数字都是浮点型,日期格式是数字的解决办法

    excel文件内容: 读取excel: # coding=utf-8 import xlrd import sys reload(sys) sys.setdefaultencoding('utf-8' ...

  5. 工作那么久,才知道的 SOLID 设计原则

    认识 SOLID 原则 无论是软件系统设计,还是代码实现,遵循有效和明确的设计原则,都利于系统软件灵活可靠,安全快速的落地,更重要的是能灵活地应对需求,简化系统扩展和维护,避免无效的加班.本文主要讨论 ...

  6. Python-字符串内容检测

    str.isnumeric():检测字符串是否只由数字组成 str.isalpha():检测字符串是否只由字母组成 str.islower():检测字符串中所有的字母是否都为小写 str.isuppe ...

  7. requests接口自动化4-登录后才能访问的get请求,需共享cookie

    登录后才能访问的get请求,需共享cookie fiddler里请求响应结果: 代码: import requests import json #form表单形式的post请求,用data传参,Con ...

  8. redis(二):Redis 命令

    Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 语法 Redis 客 ...

  9. A Broken Calculator 最详细的解题报告

    题目来源:A Broken Calculator 题目如下(链接有可能无法访问): A Broken Calculator Time limit : 2sec / Stack limit : 256M ...

  10. 循序渐进VUE+Element 前端应用开发(15)--- 用户管理模块的处理

    在前面随笔介绍了ABP+Vue前后端的整合处理,包括介绍了ABP的后端设计,以及前端对ABP接口API的ES6的封装,通过JS的继承类处理,极大减少了重复臃肿的代码,可以简化对后端API接口的封装,而 ...