NTT入门,放个板子

  1. // luogu-judger-enable-o2
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define fr(i, a, b) for ( int i = a; i <= b; ++ i)
  5. #define mid ( l + r >> 1)
  6. typedef long long ll;
  7. , mod = , Ge = ;
  8. template <class T> void G(T &x) {
  9. x = ; ; ;
  10. ) + (x << ) + (o & ); x *= f;
  11. }
  12. ll n, g[], f[], a[], b[], rev[];
  13. ll w[][];
  14. ll _pow(ll x, ll n) { ll ans = ; , x = x * x % P) ) ans = ans * x % P; return ans;}
  15. inline void NTT(ll *a, int n, int f) {
  16. ; i < n; ++ i) if( i < rev[i]) swap(a[i], a[rev[i]]);
  17. w[][] = w[][] = ;
  18. ; i < n; i++) {
  19. w[][i] = w[][i - ] * _pow(Ge, (P - ) / n) % P;
  20. w[][i] = _pow(w[][i], P - );
  21. }
  22.  
  23. ; i < n; i <<= )
  24. , l = n / (i << ); j < n; j += (i << ))
  25. , t = ; k < i; k += , t += l) {
  26. ll x = a[j + k], y = w[f][t] * a[i + j + k] % P;
  27. a[j + k] = (x + y) % P, a[i + j + k] = (x - y + P) % P;
  28. }
  29.  
  30. ; f && i < n; i++)
  31. a[i] = a[i] * _pow(n, P - ) % P;
  32. }
  33. inline void cdq(int l, int r) {
  34. if( l == r) return ;
  35. cdq(l, mid);
  36. , L = ;
  37. ) << ; Len <<= ) ++ L;
  38. fr(i, , Len) rev[i] = (rev[i >> ] >> )|((i&) << L-);
  39. fr(i, , Len) a[i] = b[i] = ;
  40. fr(i, l, mid) a[i-l] = f[i];
  41. fr(i, , r-l) b[i] = g[i];
  42. NTT(a, Len, ); NTT(b, Len, );
  43. fr(i, , Len) a[i] = a[i] * b[i] % P;
  44. NTT(a, Len, );
  45. fr(i, mid+, r) f[i] = (f[i] + a[i-l]) % mod;
  46. cdq(mid+, r);
  47. }
  48.  
  49. int main() {
  50. G(n); fr(i, , n-) G(g[i]);
  51. f[] = ; cdq(, n-);
  52. fr(i, , n-) printf("%lld ", f[i]);
  53. }

[洛谷P4721]分治FFT的更多相关文章

  1. 洛谷 P4721 【模板】分治 FFT 解题报告

    P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 \(n−1\) 的数组 \(g[1],g[2],\dots,g[n-1]\),求 \(f[0],f[1],\d ...

  2. [洛谷P4721]【模板】分治 FFT

    题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$f_i=\sum_{j=1}^if_{i-j}g_j\\f_0=1$$ 题解:直接求复杂度是$O(n^ ...

  3. 洛谷P4721 【模板】分治 FFT(分治FFT)

    传送门 多项式求逆的解法看这里 我们考虑用分治 假设现在已经求出了$[l,mid]$的答案,要计算他们对$[mid+1,r]$的答案的影响 那么对右边部分的点$f_x$的影响就是$f_x+=\sum_ ...

  4. 洛谷P4721 【模板】分治 FFT(生成函数+多项式求逆)

    传送门 我是用多项式求逆做的因为分治FFT看不懂…… upd:分治FFT的看这里 话说这个万恶的生成函数到底是什么东西…… 我们令$F(x)=\sum_{i=0}^\infty f_ix^i,G(x) ...

  5. 洛谷 P4721 [模板]分治FFT —— 分治FFT / 多项式求逆

    题目:https://www.luogu.org/problemnew/show/P4721 分治做法,考虑左边对右边的贡献即可: 注意最大用到的 a 的项也不过是 a[r-l] ,所以 NTT 可以 ...

  6. [洛谷P4721]【模板】分治 FFT_求逆

    题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$f_i=\sum_{j=1}^if_{i-j}g_j\\f_0=1$$ 题解:分治$FFT$博客,发现 ...

  7. 2019.01.04 洛谷 P4721 【模板】分治 FFT

    传送门 如同题目所描述的一样,这是一道板题. 题意简述:给你一个数组g1,2,...ng_{1,2,...n}g1,2,...n​并定义f0=1,fi=∑j=1ifi−jgjf_0=1,f_i=\su ...

  8. [P4721] 分治 FFT

    「题意」给定\(g[0]=1\),\(g[1~n-1]\)求序列\(f[i]=\sum_{j=1}^i f[i-j]*g[j]\ , i\in[1,n-1],f[0]=1\). 「分析」分治处理区间[ ...

  9. 洛谷P1228 分治

    https://www.luogu.org/problemnew/show/P1228 我真傻,真的,我单知道这种题目可以用dfs剪枝过,没有想到还能构造分治,当我敲了一发dfs上去的时候,只看到一个 ...

随机推荐

  1. 第01章 开发准备(对最新版的RN进行了升级)1-2+项目技术分解

  2. 07-Location之正则匹配

    大网站专门有自己的图片服务器,起码也得单独放一个目录里面. 淘宝网有些图片开启了防盗链(即使是小图片,也不让你下载,真小气).163新闻可以下载. 用正则匹配uri中的image,就是说你的uri中到 ...

  3. Centos7.2 下搭建LNMP环境(终极版)Yum安装

    PHP7.1+Nginx+MySQL5.7 安装PHP //安装源只要遇到选择的全是Y rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-rele ...

  4. laravel的模型关联之(一对多的反向)

    一对多的反向 一对多的反向就相当于,一个用户有多篇文章,但是在显示文章模型的时候你又想显示这个用户的用户名,但是你只有用户id, 这时候就用到了一对多的反向,你用用户(User)模型里面定义了一对多来 ...

  5. opencv掩膜操作

    #include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...

  6. 安装 SQL Server 2014 Express

    安装 SQL Server 2014 Express 我的电脑系统: Windows 10 64位 一 . 下载 安装Microsoft SQL Server 2014 Express 软甲下载地址: ...

  7. Reddit指南

    一.简介 Reddit是网页新鲜事件和热点事件的源头,它也是互联网最有趣的地方和有高度组织的链接集中处.   二.指南 http://article.yeeyan.org/view/523415/45 ...

  8. Socket接口原理及用C#语言实现

    首先从原理上解释一下采用Socket接口的网络通讯,这里以最常用的C/S模式作为范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以 ...

  9. Linux 的文件系统

    Linux 文件属性 文件属性示意图 第一栏代表这个文件的类型与权限(permission): FHS Filesystem Hierarchy Standard(文件系统层次化标准) 1. / (r ...

  10. javascript总结2: Date对象

    1 Date 对象 Date 对象用于处理日期与时间. Date()的方法很多,这里只总结工作必备的方法! 2 常用方法 创建个 Date 对象:const mydate=new Date(); &l ...