ZROI 19.08.01 生成函数方法
写在前面:由于我数学基础不好,加上缺乏生成函数知识,所以这一下午我都处在掉线和非掉线的叠加态。而且我写\(\LaTeX\)很慢,所以笔记相当混乱而且不全面。说白了就是我太菜了听不懂。
1.一般生成函数
直接把序列写成多项式的形式。可以做个背包。
- 形式幂级数:只关心系数,不关心\(x\)的具体取值。只要运算方便,就可以把\(x\)取任意值来计算。
\[1+x+x^2+…=\frac{1}{1-x}\]
显然这个东西是不对的,比如\(x=2\)就gg了。
但是我们硬点\(0<x<1\),它就是对的。
- 例题:求序列\(\{0,1,4,…,n^2,…\}\)的生成函数。
错位相减法去考虑就好。
\[f(x)=\sum_{i=0}i^2x^i\]
\[x\cdot f(x)=\sum_{i=1}(i-1)^2x^i=\sum_{i=1}i^2x^i+\sum_{i=1}-2i\cdot x^i+\sum_{i=1}x^i\]
\[(1-x)f(x)=2\sum_{i=1} i\cdot x^i-\sum_{x=1}x^i=\frac{2x}{(1-x)^2}-\frac{x}{1-x}\]
\[f(x)=\frac{x^2+x}{(1-x)^3}=\frac{x(x+1)}{(1-x)^3}\]
2.指数生成函数
形如\(f(x)=\sum \frac{a_ix^i}{i!}\)的东西,卷积的时候会自动生成一个组合数,适合解决排列组合型问题。
\[f(x)=\sum_{i=0} \frac{x^i}{i!}=e^x\]
\(e^x\)在零点处的展开就是上述式子,虽然我不知道怎么展开。
\[f(x)=\sum_{i=0} \frac{x^{2i}}{(2i)!}=\frac{e^x+e^{-x}}{2}\]
把\(x=-x\)代入第一个式子,然后两项相加。
\[f(x)=\sum_{i=0} \frac{x^{2i+1}}{(2i+1)!}=\frac{e^x-e^{-x}}{2}\]
同理。
- 循环卷积
大概就是卷积之后对下标取模的结果。
FFT的本质就是一维循环卷积,只不过保证\(n\)(循环节)比较长,所以不会溢出(即,此处不需要取模)。
也可以扩展到二维,需要对两维都DFT一遍,下标取模。甚至可以扩展到\(k\)维,对每一维都单独做就好了。
- 为了循环卷积,我们需要对长度为循环节的数组做DFT,所以接下来老师讲了一个任意长度DFT的\(O(k\log k)\)神仙做法,而且我(几乎)听懂了,但是因为公式太长,我记不下来。出处是myy的paper。
- \(n\)个点\(m\)条边的有向图,边权是一个二元组\((a_i,b_i)\),初始有一个二元组\((0,0)\),每经过一条边,权值会变为\(((x+a_i)\mod n, (y+b_i)\mod(n-1))\)。对每个三元组\((i,x,y)\),求出从点\(i\)出发,经过恰好\(k\)条边回到\(i\)点,最终权值为\((x,y)\)的方案数。\(n\leq 22, k \leq 10^9\)。
显然这是一个二维循环卷积。矩阵快速幂的每个元素看作一个矩阵,乘法定义为二维循环卷积。对每个转移矩阵里的循环卷积矩阵预处理DFT,就能把单次循环卷积的复杂度降为\(O(n^2)\),再进行矩阵快速幂,总复杂度\(O(n^5\log k)\)。
(顺便一提,上面的东西我只能勉强理解,写是不可能写出来的)
- 接下来是一个神题,好像是循环卷积开根,我掉线了。
- \(m\)个点的图,任意一条长度为\(k\)的倍数的路径会对答案产生\(C(n,len)\)的贡献,答案对\(p\)取模。\(m \leq 10,k\leq 1000,p \equiv1(\mod k),n\leq 10^{18}\)。
每个点加一个自环,这样\(C(n,len)\)就转化成了长度恰好为\(n\)的路径,且贡献都是\(1\)。
考虑矩阵快速幂,但是每个点需要维护一个长度为\(k\)的数组,\(f_i\)表示长度\(\equiv i (\mod k)\),这个数组的乘法定义为循环卷积。
暴力做是\(O(m^3k^2\log n)\),但是可以用我也不会的某种玄妙的插值做出DFT,做到\(O(m^3k\log n+k^2)\)。
- 与Polya定理结合:一个\(n\)个点的环,染成\(m\)种颜色,要求每种颜色恰好\(c_i\)个。
发现可以把Polya定理套进去,直接生成函数做就好。
- 牛顿迭代
不会导数,不会Taylor展开,掉线了。
- 多项式求逆/除法/\(\ln\)/\(\exp\)/多点求值/多点插值
左转你谷模板区,请。不过NOI到19年也没有考过FFT,估计这东西学了也没啥用。
- 求\(n\)的分拆数(不降整数序列之和)。
\(O(\sqrt n)\)做法:
对于\(a_i\leq \sqrt n\)的情况,可以背包做。
否则,这样的\(a_i\)最多\(\sqrt n\)个,可以暴力。
\(O(n \log n)\)做法:
多项式\(\ln\),多项式积分,多项式\(\exp\)。
这是什么?不知道。
- 然后又是一道神题,显然我又掉线了。
- 然后又是一道神题,显然我又掉线了。
- 然后又是一道神题,显然我又掉线了。
- 然后又是一道神题,显然我又掉线了。
嗯,不是你的网卡了。
ZROI 19.08.01 生成函数方法的更多相关文章
- ZROI 19.08.01 树上数据结构
1.总览 LCT 链分治(树剖) 点/边分治 2.点分治 一棵树,点有\(0/1\),多次修改,询问最远的两个\(1\)距离. 建出点分树,每个子树用堆维护:①最远的\(1\)距离:②它的每个儿子的① ...
- ZROI 19.08.03 分治与离线
经典问题,给一张图,支持加边/删边/询问两点连通性. 离线统计边权(删除时间),lct维护最大生成树即可. 也可以按时间分治,维护一个可回退并查集即可. 主定理 很好用,但是记不住. 有一种简明的替代 ...
- ZROI 19.08.03 DP入门
\(n\)个点,要求连一棵树,设点\(i\)的度数为\(d_i\),则其贡献为\(f(d_i)\mod 59393\),其中\(f(x)\)是一个\(k\)次多项式.最大化总贡献.\(n\leq 30 ...
- ZROI 19.08.10模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(20pts:\) 枚举操作序列然后暴力跑,复杂度\(O(6^n)\). \([50,80]pts:\) 枚举改成dfs,每层操 ...
- ZROI 19.08.07模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "正睿从来没有保证,模拟赛的题目必须原创." "文案不是我写的,有问题找喵老师去."--蔡老师 ...
- ZROI 19.08.02 杂题选讲
给出\(n\)个数,用最少的\(2^k\)或\(-2^{k}\),使得能拼出所有数,输出方案.\(n,|a_i|\leq 10^5\). 显然一个绝对值最多选一次.这个性质非常强. 如果所有都是偶数, ...
- ZROI 19.08.02 计算几何
1.向量基础知识 \(atan2\)可以求极角,但是不是特别精确,在坐标接近\(10^{9}\)时会出锅,安全的做法是叉积. 旋转.反射和平移等都可以抽象为矩阵,即,它们可以复合.(需要一些必修四知识 ...
- ZROI 19.08.12模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "我发现问题的根源是大家都不会前缀和."--敦爷 A 敦爷spj写错了,差点把蒟蒻swk送走 \(50pts:\) ...
- ZROI 19.08.11模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. dlstql,wsl A \(10pts:\) \(a=100,T=100\),对每个排列构造一个反的,一步到位即可. \(20pts ...
随机推荐
- Elasticsearch 为何要在 7.X版本中 去除type 的概念
背景说明 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库. El ...
- java:LeakFilling(Servlet,JSP)
1.web-inf中的 .jsp 文件不会运行,其他都根据web.xml文档中的自然顺序进行运行 2.keep-alive 长连接(持续) UDP,TCP短连接 3.状态码:1(消息异常) 2(成 ...
- java:多线程(代理模式,Thread中的方法,Timer,生产者和消费者)
*进程:一个正在运行的程序,进程是操作系统分配资源的基本单位,每个进行有独立的内存空间,进程之间切换开销较大. *线程:一个轻量级的进程,线程是任务调度的基本单位,一个进程可以有多个线程, * 系统没 ...
- centos中切换图形与命令行界面
1.在命令行的centos中安装图形化 配置本地源 [root@localhost yum.repos.d]# yum clean all [root@localhost yum.repos.d]# ...
- unity快捷放置物体操作
https://connect.unity.com/p/zui-jia-shi-jian-dui-xiang-fang-zhi-he-wu-li-xiao-guo 最佳实践系列文章将探讨我们在与客户合 ...
- cocos2dx[3.2](8) 数学类Vec2/Size/Rect
数学类Vec2.Size.Rect,是cocos2dx中比较常用的类. 比如设置图片位置,设置图片大小,两图片的碰撞检测等等. 比起2.x版本,在3.x中本质上其实没有太大的变化,主要的变化就是将全局 ...
- DSP28335 GPIO学习
根据网络资料以及以下两篇博客整理 http://blog.sina.com.cn/s/blog_86a6035301017rr7.html http://blog.csdn.net/hmf123578 ...
- [深度应用]·Keras极简实现Attention结构
[深度应用]·Keras极简实现Attention结构 在上篇博客中笔者讲解来Attention结构的基本概念,在这篇博客使用Keras搭建一个基于Attention结构网络加深理解.. 1.生成数据 ...
- 【VS开发】【Qt开发】使用process explorer查看exe调用dll的情况
打开process explorer 选中想要查看句柄或者加载的dll的进程,比如下面截图红框中的 chrome.exe 菜单点击view / Lower Pane View,其下有DLLS和Hand ...
- 使用new关键字创建对象数组(C#,C++,Java)
今天遇到一个题目 分析下面的代码,判断代码是否有误. using System; namespace Test1 { class Point { public int x; public int y; ...