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的整数数列中取出连续的若干 ...
随机推荐
- requirejs之demo
具体的理论就不讲了,可以参考 http://www.ruanyifeng.com/blog/2012/10/javascript_module.html http://www.ruanyifeng.c ...
- P1330 封锁阳光大学——深度优先搜索DFS
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由 \(n ...
- Python——assert、isinstance的用法
1.assert 函数说明: assert语句是一种插入调试断点到程序的一种便捷的方式. 使用范例 assert 3 == 3 assert 1 == True assert (4 == 4) pri ...
- pythonl操作数据库
目录 今日内容详细 Navicat软件 提示 练习题 pymysql模块 sql注入 navicat可视化界面操作数据库 数据库查询题目讲解(多表操作) python如何操作MySQL(pymysql ...
- day28 作业
import uuid import pickle import os # 学校类 class School: #校区的名字:如"老男孩上海校区" #校区的地址:如"上海 ...
- 最新Spark入门篇
一.Spark简介 1.什么是Spark Apache Spark是一种快速的集群计算技术,基于Hadoop MapReduce技术,扩展了MapReduce模型,主要特性是在内存中集群计算,速度更快 ...
- JavaScript图形实例:平面镶嵌图案
用形状.大小完全相同的一种或几种平面图形进行拼接,彼此之间不留空隙.不重叠地铺成一片,就叫做这几种图形的平面镶嵌. 1.用一种多边形实现的平面镶嵌图案 我们可以采用正三角形.正方形或正六边形实现平面镶 ...
- 012.Nginx负载均衡
一 负载均衡概述 1.1 负载均衡介绍 负载均衡是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验.对于Web应用,通过负载均衡,可以将一台服务器的工作扩展到多台服务 ...
- 牛客练习赛 66C公因子 题解
原题 原题 思路 考场想复杂了,搞到自闭-- 实际上,因为差值不变,我们可以先差分,求\(\gcd\),便得到答案(考场时想多了,想到了负数.正数各种复杂的处理,但是不需要),最后处理一下即可 代码 ...
- scratch编程体感游戏
体感游戏有很多种,最常见的就是摄像头和声控了,今天我们要用scratch编写一系列的体感游戏!!!是不是很激动呢? 首先我们来编摄像头类的: No.1拳头打幽灵 挥动头就能打到幽灵了哟! 具体程序如下 ...