Pre

式子变换需要注意一下

Solution

注意到\(f(x)g(x)+f_0=f(x)\)

其实开始我没看出来,后来发现仔细分析一下就可以了。

然后式子变换

\(f(x)=\frac{f_0}{1-g(x)}\)

注意这里的\(1-\)是只减常数项,因为这里的\(f(x)\)和\(g(x)\)是指的函数,而不是系数。

Code

#include <cstdio>
#include <queue>
#include <cstring>
#define ll long long
#define xx first
#define yy second
using namespace std;
inline void swap (int &a, int &b) {int c = a;a = b,b = c;
}
const int N = 250000 + 5, mod = 998244353, inver = 332748118;
int nn, g[N], f[N];
inline int add (int u, int v) {return u + v >= mod ? u + v - mod : u + v;}
inline int mns (int u, int v) {return u - v < 0 ? u - v + mod : u - v;}
inline int mul (int u, int v) {return 1LL * u * v % mod;}
inline int qpow (int u, int v) {int tot = 1, base = u % mod;while (v){if (v & 1) tot = mul (tot, base);base = mul (base, base);v >>= 1;}return tot;
}
int c[N], rev[N];
inline void NTT (int *a, int n, int bit, bool flag) {for (int i = 0; i < n; ++i) {rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (bit - 1));if (i > rev[i]) swap (a[i], a[rev[i]]);}for (int l = 2; l <= n; l <<= 1) {int wi = qpow (flag ? inver : 3, (mod - 1) / l);int m = l / 2;for (int *k = a; k != a + n; k += l) {int w = 1;for (int i = 0; i < m; ++i) {int tmp = mul (k[i + m], w);k[i + m] = mns (k[i], tmp);k[i] = add (k[i], tmp);w = mul (w, wi);}}}int tmp = qpow (n, mod - 2);for (int i = 0; i < n && flag; ++i) {a[i] = mul (a[i], tmp);}
}
inline void Inv (int *a, int *b, int deg) {if (deg == 1) {b[0] = qpow (a[0], mod - 2);return ;}Inv (a, b, (deg + 1) >> 1);int n = 1, bit = 0;while (n < (deg << 1)) n <<= 1, ++bit;for (int i = 0; i < deg; ++i) c[i] = a[i]; for (int i = deg; i < n; ++i) c[i] = 0;NTT (c, n, bit, false);NTT (b, n, bit, false);for (int i = 0; i < n; ++i) b[i] = mns (mul (2, b[i]), mul (c[i], mul (b[i], b[i])));NTT (b, n, bit, true);for (int i = deg; i < n; ++i) b[i] = 0;
}
int main () {#ifdef chitongzfreopen ("x.in", "r", stdin);#endifscanf ("%d", &nn);for (int i = 1; i <= nn - 1; ++i) scanf ("%d", &g[i]), g[i] = mns (mod, g[i]);g[0] = add (g[0], 1);Inv (g, f, nn);for (int i = 0; i < nn; ++i) printf ("%d ", f[i]);puts ("");return 0;
}

Conclusion

注意一下什么时候系数减法,什么时候常熟减法。

转载于:https://www.cnblogs.com/ChiTongZ/p/11351252.html

LuoGuP4721:【模板】分治 FFT相关推荐

  1. 洛谷 - P4721 【模板】分治 FFT(分治NTT)

    题目链接:点击查看 题目大意:给出序列 g1,⋯,ng_{1,\cdots,n}g1,⋯,n​,求 f0,⋯,nf_{0,\cdots,n}f0,⋯,n​ 规定 fi=∑j=1ifi−jgjf_i=\ ...

  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 ...

  3. 【学习笔记】分治FFT

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 分治FFT 1. Luogu P4721 [模板]分治 FFT 2. 2020 ICPC Mac ...

  4. 2020 ICPC Macau A. Accelerator(期望,计数,分治FFT)(每日一题 21.7.6)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2020 ICPC Macau A. Accelerator(分治FFT) Problem 给定长度为 ...

  5. FTT NTT 分治FFT

    FFT study from: http://www.orchidany.cf/2019/02/19/FFT1/ https://www.cnblogs.com/zwfymqz/p/8244902.h ...

  6. (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT

    题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂 ...

  7. luogu P4726 多项式指数函数(模板题FFT、多项式求逆、多项式对数函数)

    luogu P4726 多项式指数函数(模板题FFT.多项式求逆.多项式对数函数) 手动博客搬家: 本文发表于20181127 08:39:42, 原地址https://blog.csdn.net/s ...

  8. [分治FFT]「CTSC2018」青蕈领主

    题目梗概 定义一个序列是连续的,当且仅当这个序列的最大值-最小值不超过序列长度-1. 现在有一个长度为\(n\)的排列,给出以每个位置为右端点的最长连续区间的长度,求满足的排列的方案数. 解题思路 如 ...

  9. HDU5322 - cdq分治FFT加速dp

    5322 Hope [CDQ分治FFT加速计算dp] 题意 每一个每一个排列,排列中每个数向它后面第一个比它大的数连一条边. 每个排列对于答案的贡献是这个排列所生成的图中的每一个联通量中点的个数的平方 ...

  10. 【牛客 - 157F】三轮(dp,分治fft)

    题干: 链接:https://ac.nowcoder.com/acm/contest/157/F 来源:牛客网 小k有一个三轮,它最多可以装105大小的东西 小k有n种商品,他要准备出摊了 每种商品体 ...

最新文章

  1. 神经网络 Log-Sum-Exp
  2. 1103 Integer Factorization (30 分)【难度: 中 / 爆搜】
  3. 网易模板html,163企业邮箱HTML网站模板
  4. Scala数组元素的修改update
  5. influxdb介绍,安装,使用等(转载:http://www.jianshu.com/p/d2935e99006e)
  6. c语言打印空心等腰梯形乐学,C语言做激光发射
  7. 玩转oracle 11g(50):rman备份脚本
  8. 公钥、私钥、数字签名、数字证书、对称与非对称算法、HTTPS
  9. 小程序做一个能够左右滑动切换的多tab页面
  10. java鼠标点击暂停程序_java – LWJGL抓取鼠标 – 如果应用程序挂起或使用抓取的鼠标点击断点时调试...
  11. 超过 1 亿 Android 用户的数据遭泄露!
  12. HDUOJ3549 - Flow Problem(网络流+最大流最小割+模板)
  13. Matlab矩阵各行各列求和的不同方法
  14. 互联网+(怎样保证小孩的安全) 2
  15. 民营医院网络咨询解答技巧
  16. jmeter 变量的使用
  17. 小学计算机教师业务笔记,小学教师业务笔记
  18. html中点重置和提交没反应,为什么点击按钮没反应??
  19. mint-ui —— navbar的使用
  20. VGG16各层处理过程

热门文章

  1. Struts2国际化标签 i18n
  2. 电脑如何进入bios模式_电脑如何进入bios关闭软驱
  3. infinity mysql_MySql锁机制
  4. 计算机光盘工作原理,CD-ROM的工作原理
  5. 社死,客户现场网络一直ping不通咋办?
  6. 【必看】 一篇 CPU 占用高,导致请求超时的故障排查
  7. EventBridge消息路由|高效构建消息路由能力
  8. 如何在 Spring 生态中玩转 RocketMQ?
  9. CNCF 宣布首个中国原创项目 Harbor 毕业 | 云原生生态周报 Vol. 55
  10. Python实现九九乘法表