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

  1. 2019 HL SC day1

    今天讲的是图论大体上分为:有向图的强连通分量,有向图的完全图:竞赛图,无向图的的割点,割边,点双联通分量,变双联通分量以及圆方树 2-sat问题 支配树等等. 大体上都知道是些什么东西 但是仍需要写一 ...

  2. 2019 HL SC day4

    自闭场本来 以为 顶多一些不太会 结果发现 一堆不太会 . 树状数组  感觉 好久没看 了有点遗忘 不过还好 现在我来了.莅临之神将会消灭一切知识点哦. 今天说点不一样东西 树状数组 hh 很有用的东 ...

  3. 2019 HL SC day2

    今天讲的是网络流 大部分题目都写过了 这里 就总结一番. bzoj 1066 裸的最大流 不过需要拆点细节方面有一点坑 剩下的 没什么了. //#include<bits/stdc++.h> ...

  4. Solr分组查询

     项目中需要实时的返回一下统计的东西,因此就要进行分组,在获取一些东西,代码拿不出来,因此分享一篇,还是很使用的. facet搜索 /** * * 搜索功能优化-关键词搜索 * 搜索范围:商品名称.店 ...

  5. 正睿2019省选附加赛 Day10 (这篇其实已经都咕咕了...)

    目录 2019.3.13 A.算算算(二项式定理 斯特林数) B.买买买 C.树树树 2019.3.13 比赛链接 A.算算算(二项式定理 斯特林数) 题目链接 \(x^k\)可以用二项式定理展开,需 ...

  6. Python脱产8期 Day10 2019/4/24

    一 函数 1.定义:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数>>工具. 2.函数的优点:1.避免代码的冗余:2.让程序结构代码更加清晰:3.让代码更加具 ...

  7. 正睿 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( ...

  8. 2019 7 8 HL 模拟赛

    今天 很不爽 昨天晚上没有睡好觉 大约2点才睡着吧 反正翻来覆去睡不着 不知道为什么可能可行流 或者可行费用流并没有深刻理解 .我不会写 让我心情非常的焦躁. 大凶 顺理成章的被3位强者吊着锤(妈呀我 ...

  9. 2019基于Hexo快速搭建个人博客,打造一个炫酷博客(1)-奥怪的小栈

    本文转载于:奥怪的小栈 这篇文章告诉你如何在2019快速上手搭建一个像我一样的博客:基于HEXO+Github搭建.并完成SEO优化,打造一个炫酷博客. 本站基于HEXO+Github搭建.所以你需要 ...

随机推荐

  1. linux新用户(组)的那些事

    linux新用户(组)的那些事   创建新用户 groupadd bigdata //添加新用户组bigdata useradd -g bigdata es //-g:为用户组添加新用户 passwd ...

  2. 阿里巴巴java-数据库开发手册(2020泰山版)

    阿里巴巴编程规范.数据库命名规范 首先感谢阿里,在此我也分享给小伙伴们学习,下载地址如下: 链接:https://pan.baidu.com/s/19SLpiJmyNEIKuRscftRk9Q 提取码 ...

  3. Golden Tiger Claw,题解

    题目链接 题目: 题意: 找到和最小的两个序列a,b满足对于任意i,j有a[i]+b[j]>=c[i][j](矩阵c给出). 分析: 首先很容易看出来要使这题要用KM算法,为啥呢?因为要最小化a ...

  4. Python并发编程03 /僵孤进程,孤儿进程、进程互斥锁,进程队列、进程之间的通信

    Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进 ...

  5. 那些非cmake生成的VTK工程存在的让人崩溃的坑

    由于cmake和IDE的一些编译选项不同,所以导致我们使用者需要多做一些事情.而且vtk官方也表示: If you are not using CMake to compile your code, ...

  6. Quartz.Net系列(十六):Misfire策略在SimpleScheduler和CronScheduler中的使用

    1.场景 ①因为工作线程都在忙碌,所以导致某些Trigger得不到触发 也就是默认10个工作线程而我有15个Trigger同时触发 这就导致有5个不能被触发,而不幸的是Trigger所关联的Job执行 ...

  7. 【Nginx】如何格式化日志并推送到远程服务器?看完原来很简单!!

    写在前面 Nginx作为最常用的反向代理和负载均衡服务器,被广泛的应用在众多互联网项目的前置服务中,很多互联网项目直接将Nginx服务器作为整个项目的流量入口.这就使得我们可以通过对Nginx服务器日 ...

  8. clang-format的介绍和使用

    目录 参考信息 介绍 安装 命令格式 基本使用 使用.clang-format来实现自定义格式化 导出.clang-format文件 使用.clang-format文件 .clang-format配置 ...

  9. 谷歌浏览器扩展 crx 下载

    下方服务可让国内成功下载谷歌浏览器.crx 扩展,如谷歌浏览器无法安装,可以使用终极解决方法,把.crx 解压缩,然后在扩展中心中开启 开发者模式然后选择加载已解压的扩展程序. 需要注意的是解压缩的文 ...

  10. fastjson将json字符串转化为java对象

    目录 一.导入一个fastjson的jar包 二.Json字符串格式 三.根据json的格式创建Java类 四.给java类的所有属性添加setter方法 五.转换为java对象 一.导入一个fast ...