2019 HL SC day10
10天都过去了 4天都在全程懵逼。。
怎么可以这么难啊 我服了 现在想起依稀只记得一些结论 什么 反演? 什么后缀自动机?什么组合数的应用?什么神仙东西 ,不过讲课人的确都是神仙。(实名羡慕。
mzx 学长讲的每次都是这么亲民 哇哦 感觉比较舒服的课程 因为比较简单 也给我这个蒟蒻 好好理解了一下指数型生成函数(母函数) 还有一些以前不懂的概念 现在都清晰 了很多了。
多项式 即函数 中附带一个x 的多次幂的东西。卷积 就是两个函数相乘 生成另一个函数的东西。
所以说 这叫做多项式的乘法 当然多项式还有加法 减法 除法 自然除法也是有逆元的 多项式逆元 求出来我们就可以完成操作了。
学长:当发现一个多项式有一点复杂的时候 我们可以求出其逆元 然后 再倒回来 会发现式子变得简单很多。
然后讲了 生成函数和dp 之间的联系 其实我觉得表现形式不太一样剩下的都还好。
ps:学了一发怎样求导 学了一发泰勒展开逼近函数式。
多项式的乘法 也就是 其卷积 复杂度一般为nm 然后FFT 可以优化到(n+m)log(n+m)大致就是这个复杂度。
这样的话对于一类题目 我们把 一些dp 通过生成函数的形式 转换成多项式然后进行多项式乘法快速递推从而推出答案 这是极大的优化。
上午的具体内容就这么多 当然 多项式的化简也很重要 不过一般都是 泰勒展开 逼近 化简 什么的 或者求逆 再倒 这样也能达到化简目的 。注:bzoj 3028 生成函数好题。
现在说一下FFT 吧快速傅里叶变换。。
显然的是 我们直接卷积 是nm 的 这里考虑 利用插值法求出我们的 卷积也就是 生成的另一个函数。那么插值 则需要生成点。
那么我们的DFT 算法就有了 生成点(n+1)个 n^2 合在一起 O(n) 拉格朗日插值快速求 n^2
当然 下午 学长给我们讲了FFT 理解的还行 用到了以前学习的知识总算没有学(这个电脑的输入法都快把我惹火了 受不了)
一些事情 我心情也很不好,别惹我,我会咬人的。 (遇到了老同学 殊途异路 同是天涯沦落人 相逢何必曾相识
FFT DFT 的时候使用复数的单位根 然后 矩阵求逆的时候再次使用单位根 这样 复杂度都是nlogn 所以这也是FFT 的 精妙之处。
首先是求值 显然的是 我们现在是已知系数 一直 自变量 要求 f值 求值得过程 我们将各个系数进行分治 注意这里的递归logn 只是为了求出各个f值而分治的 由单位根可知。
关于 FFT 函数中的东西 我们必须要明白 系数阵*x=值 我们由FFT 的x不断的^2 可以缩小 至其他的x 将会被我们以圆的方式转到。
这便是我对FFT 的理解。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define db double
using namespace std;
//FFT author :Chdy
const int MAXN=;
const db pi=acos(-1.0);
int n,m,h,t;
struct wy
{
db v,r;
inline wy friend operator +(const wy x,const wy y){return (wy){x.v+y.v,x.r+y.r};}
inline wy friend operator -(const wy x,const wy y){return (wy){x.v-y.v,x.r-y.r};}
inline wy friend operator *(const wy x,const wy y){return (wy){x.v*y.v-x.r*y.r,x.r*y.v+y.r*x.v};}
}a[MAXN],b[MAXN],tmp[MAXN];
int R[MAXN];
inline void FFT(wy *a,int len,int f)
{
if(len==)return;
for(int i=;i<len/;++i)
{
tmp[i]=a[i<<];
tmp[i+(len>>)]=a[i<<|];
}
for(int i=;i<len;++i)a[i]=tmp[i];
FFT(a,len>>,f);FFT(a+(len>>),len>>,f);
wy wn={cos(*pi/len),f*sin(*pi/len)},w={,};
for(int i=;i<len/;++i)
{
wy x=a[i],y=w*a[i+len/];
a[i]=x+y;a[i+len/]=x-y;
w=w*wn;
}
}
int main()
{
freopen("1.in","r",stdin);
ios::sync_with_stdio(false);
cin>>n>>m;++n;++m;
for(int i=;i<n;++i)cin>>a[i].v;
for(int j=;j<m;++j)cin>>b[j].v;
for(h=t=;t<(n+m-);t=t<<)++h;
//for(int i=1;i<t;++i)R[i]=
FFT(a,t,);FFT(b,t,);
for(int i=;i<t;++i)a[i]=a[i]*b[i];
FFT(a,t,-);
for(int i=;i<n+m-;++i)cout<<(int)(a[i].v/t+0.5)<<' ';
return ;
}
2019 HL SC day10的更多相关文章
- 2019 HL SC day1
今天讲的是图论大体上分为:有向图的强连通分量,有向图的完全图:竞赛图,无向图的的割点,割边,点双联通分量,变双联通分量以及圆方树 2-sat问题 支配树等等. 大体上都知道是些什么东西 但是仍需要写一 ...
- 2019 HL SC day4
自闭场本来 以为 顶多一些不太会 结果发现 一堆不太会 . 树状数组 感觉 好久没看 了有点遗忘 不过还好 现在我来了.莅临之神将会消灭一切知识点哦. 今天说点不一样东西 树状数组 hh 很有用的东 ...
- 2019 HL SC day2
今天讲的是网络流 大部分题目都写过了 这里 就总结一番. bzoj 1066 裸的最大流 不过需要拆点细节方面有一点坑 剩下的 没什么了. //#include<bits/stdc++.h> ...
- Solr分组查询
项目中需要实时的返回一下统计的东西,因此就要进行分组,在获取一些东西,代码拿不出来,因此分享一篇,还是很使用的. facet搜索 /** * * 搜索功能优化-关键词搜索 * 搜索范围:商品名称.店 ...
- 正睿2019省选附加赛 Day10 (这篇其实已经都咕咕了...)
目录 2019.3.13 A.算算算(二项式定理 斯特林数) B.买买买 C.树树树 2019.3.13 比赛链接 A.算算算(二项式定理 斯特林数) 题目链接 \(x^k\)可以用二项式定理展开,需 ...
- Python脱产8期 Day10 2019/4/24
一 函数 1.定义:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数>>工具. 2.函数的优点:1.避免代码的冗余:2.让程序结构代码更加清晰:3.让代码更加具 ...
- 正睿 2019 省选附加赛 Day10
A 核心就是一个公式 \[\sum_{i = 0}^{k} S(k, i) \tbinom{x}{i} i\] S是第二类斯特林数 递推公式 \(S_2(n,k)=S_2(n−1,k−1)+kS_2( ...
- 2019 7 8 HL 模拟赛
今天 很不爽 昨天晚上没有睡好觉 大约2点才睡着吧 反正翻来覆去睡不着 不知道为什么可能可行流 或者可行费用流并没有深刻理解 .我不会写 让我心情非常的焦躁. 大凶 顺理成章的被3位强者吊着锤(妈呀我 ...
- 2019基于Hexo快速搭建个人博客,打造一个炫酷博客(1)-奥怪的小栈
本文转载于:奥怪的小栈 这篇文章告诉你如何在2019快速上手搭建一个像我一样的博客:基于HEXO+Github搭建.并完成SEO优化,打造一个炫酷博客. 本站基于HEXO+Github搭建.所以你需要 ...
随机推荐
- 一起来看 HTML 5.2 中新的原生元素 <dialog>
不到一个月前,HTML 5.2 正式成为 W3C 的推荐标准(REC),其中,推出了一个新的原生模态对话框元素 <dialog>,乍一看,可能感觉它就是一个新增的元素,然而,作者最近在玩的 ...
- postman-7-前置请求脚本
前面讲了,tests初如何校验请求之后返回值是否正确 那前置脚本,就是处理,请求之前接口该如何处理,什么时候会用到呢? 比如:接口字段time,需要填入时间,而且这个是需要当前时间的,: 需要达到自动 ...
- (转自MDN)CSS基础一定要看的包含块(containing block)
之前在写<个人常用的水平居中方法>这篇文章的时候,百分比问题涉及到了包含块(containing block)这个概念. 今天刷面试题的时候,又看到了containing block这个词 ...
- 生产日志文件太大NotePad++无法打开
问题1:NotePad++无法打开 解决方式:下载软件 LogView Pro ,用 LogView Pro打开 https://download.csdn.net/download/u0145212 ...
- Oracle DataGuard主库丢失归档日志后备库的RMAN增量恢复一例
第一部分 问题描述和环境状态确认 ----1. 问题场景 Oracle DataGuard主库丢失archivelog,如何不重建备库完成同步? 在Oracle DataGuard主从同步过程中可能 ...
- 设计模式:strategy模式
思想:将算法进行抽象,然后使用桥接的模式使用算法的抽象接口,达到算法整体替换的目的 理解:和桥接模式相同,只是桥接的两边分开的思想不同 例子: class Algrithm //算法的抽象 { pub ...
- 【mysql】- 事务隔离级别和MVCC篇
概念 术语 脏写( Dirty Write ): 如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发了脏写 脏读( Dirty Read ) : 如果一个事务读到了另一个未提交事务修改过的数 ...
- HashMap源码实现分析
HashMap源码实现分析 一.前言 HashMap 顾名思义,就是用hash表的原理实现的Map接口容器对象,那什么又是hash表呢. 我们对数组都很熟悉,数组是一个占用连续内存的数据结构,学过C的 ...
- 软件测试必备技能,带你学习jmeter!
一:jmeter用户变量设置: 1.在线程组鼠标右击--添加--配置元件-用户定义的变量, 2.根据业务需求自定义变量的名称,添加需要的变量和对应的值 3.在脚本对应位置添加参数 二:文件参数化: 两 ...
- Spring Cloud Alibaba教程:Nacos
Nacos是什么 Nacos 致力于帮助您发现.配置和管理微服务,它 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. 注册中心 nacos-server 可以 ...