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的整数数列中取出连续的若干 ...
随机推荐
- POJ 3463 Sightseeing 题解
题目 Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every day the ...
- BZOJ1854 连续攻击游戏 题解
题目 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多 ...
- 【第五空间智能安全大赛】hate_php WriteUp
环境:https://www.ctfhub.com/#/challenge 打开题目可以看到源码: 阅读源码发现过滤掉了f l a g . p h / ; " ' ` | [ ] _ =这些 ...
- Python-用xlrd模块读取excel,数字都是浮点型,日期格式是数字的解决办法
excel文件内容: 读取excel: # coding=utf-8 import xlrd import sys reload(sys) sys.setdefaultencoding('utf-8' ...
- 工作那么久,才知道的 SOLID 设计原则
认识 SOLID 原则 无论是软件系统设计,还是代码实现,遵循有效和明确的设计原则,都利于系统软件灵活可靠,安全快速的落地,更重要的是能灵活地应对需求,简化系统扩展和维护,避免无效的加班.本文主要讨论 ...
- Python-字符串内容检测
str.isnumeric():检测字符串是否只由数字组成 str.isalpha():检测字符串是否只由字母组成 str.islower():检测字符串中所有的字母是否都为小写 str.isuppe ...
- requests接口自动化4-登录后才能访问的get请求,需共享cookie
登录后才能访问的get请求,需共享cookie fiddler里请求响应结果: 代码: import requests import json #form表单形式的post请求,用data传参,Con ...
- redis(二):Redis 命令
Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 语法 Redis 客 ...
- A Broken Calculator 最详细的解题报告
题目来源:A Broken Calculator 题目如下(链接有可能无法访问): A Broken Calculator Time limit : 2sec / Stack limit : 256M ...
- 循序渐进VUE+Element 前端应用开发(15)--- 用户管理模块的处理
在前面随笔介绍了ABP+Vue前后端的整合处理,包括介绍了ABP的后端设计,以及前端对ABP接口API的ES6的封装,通过JS的继承类处理,极大减少了重复臃肿的代码,可以简化对后端API接口的封装,而 ...