RXD and functions

首先是有一个结论,对多项式做任意多次 transformation ,其结果跟做一次 transformation Tr(f,∑i=1mai)Tr(f, \sum\limits_{i = 1} ^{m} a_i)Tr(f,i=1∑m​ai​)的结果是一样的,所以我们约定a=−∑i=1maia = -\sum\limits_{i = 1} ^{m} a_ia=−i=1∑m​ai​。
g=f(x+a)∑i=0nci(x+a)i∑i=0n∑j=0icii!j!(i−j)!xjai−j我们考虑只求这个多项式的xj系数gj=∑i=jncii!j!(i−j)!ai−jgj=∑i=0n−jci+j(i+j)!j!i!aigj=1j!∑i=0n−j(ci+j(i+j)!)×(aii!)设f(n)=cnn!,h(n)=ann!不难发现后项像是多项式卷积的形式,考虑翻转aii,即i=n−igj=1j!∑i=0n−jf(i+j)h(n−i)这就是一个完美的卷积形式了,于是可以NTT求解g = f(x + a)\\ \sum_{i = 0} ^{n} c_i(x + a) ^ i\\ \sum_{i = 0} ^{n} \sum_{j = 0} ^{i}c_i \frac{i!}{j!(i - j)!} x ^ j a ^ {i - j}\\ 我们考虑只求这个多项式的x ^ j系数\\ g_j = \sum_{i = j} ^{n} c_i \frac{i!}{j!(i - j)!}a ^{i - j}\\ g_j = \sum_{i = 0} ^{n - j} c_{i + j} \frac{(i + j)!}{j! i!} a ^ i\\ g_j = \frac{1}{j!} \sum_{i = 0} ^{n - j} (c_{i + j} (i + j)!) \times (\frac{a ^i}{i!})\\ 设f(n) = c_{n} n!, h(n) = \frac{a ^ n}{n!} \\ 不难发现后项像是多项式卷积的形式,考虑翻转\frac{a ^ i}{ i},即i = n - i\\ g_j = \frac{1}{j!} \sum_{i = 0} ^{n - j} f(i + j) h(n - i)\\ 这就是一个完美的卷积形式了,于是可以NTT求解 g=f(x+a)i=0∑n​ci​(x+a)ii=0∑n​j=0∑i​ci​j!(i−j)!i!​xjai−j我们考虑只求这个多项式的xj系数gj​=i=j∑n​ci​j!(i−j)!i!​ai−jgj​=i=0∑n−j​ci+j​j!i!(i+j)!​aigj​=j!1​i=0∑n−j​(ci+j​(i+j)!)×(i!ai​)设f(n)=cn​n!,h(n)=n!an​不难发现后项像是多项式卷积的形式,考虑翻转iai​,即i=n−igj​=j!1​i=0∑n−j​f(i+j)h(n−i)这就是一个完美的卷积形式了,于是可以NTT求解

#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10, mod = 998244353;int r[N];int quick_pow(int a, int n) {int ans = 1;while (n) {if (n & 1) {ans = 1ll * a * ans % mod;}a = 1ll * a * a % mod;n >>= 1;}return ans;
}void get_r(int lim) {for (int i = 0; i < lim; i++) {r[i] = (i & 1) * (lim >> 1) + (r[i >> 1] >> 1);}
}void NTT(int *f, int lim, int rev) {for (int i = 0; i < lim; i++) {if (i < r[i]) {swap(f[i], f[r[i]]);}}for (int mid = 1; mid < lim; mid <<= 1) {int wn = quick_pow(3, (mod - 1) / (mid << 1));for (int len = mid << 1, cur = 0; cur < lim; cur += len) {int w = 1;for (int k = 0; k < mid; k++, w = 1ll * w * wn % mod) {int x = f[cur + k], y = 1ll * w * f[cur + mid + k] % mod;f[cur + k] = (x + y) % mod, f[cur + mid + k] = (x - y + mod) % mod;}}}if (rev == -1) {int inv = quick_pow(lim, mod - 2);reverse(f + 1, f + lim);for (int i = 0; i < lim; i++) {f[i] = 1ll * f[i] * inv % mod;}}
}int a[N], c[N], A[N], B[N], fac[N], ifac[N], n, m, sum;void init() {fac[0] = 1;for (int i = 1; i < N; i++) {fac[i] = 1ll * fac[i - 1] * i % mod;}ifac[N - 1] = quick_pow(fac[N - 1], mod - 2);for (int i = N - 2; i >= 0; i--) {ifac[i] = 1ll * ifac[i + 1] * (i + 1) % mod;}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();while (scanf("%d", &n) != EOF) {for (int i = 0; i <= n; i++) {scanf("%d", &c[i]);}scanf("%d", &m);sum = 0;for (int i = 1; i <= m; i++) {scanf("%d", &a[i]);sum = (sum + a[i]) % mod;}sum = (mod - sum) % mod;int cur = 1;for (int i = 0; i <= n; i++) {A[i] = 1ll * c[i] * fac[i] % mod;B[n - i] = 1ll * ifac[i] * cur % mod;cur = 1ll * cur * sum % mod;}int lim = 1;while (lim <= 2 * n) {lim <<= 1;}get_r(lim);NTT(A, lim, 1);NTT(B, lim, 1);for (int i = 0; i < lim; i++) {A[i] = 1ll * A[i] * B[i] % mod;}NTT(A, lim, -1);for (int i = 0; i <= n; i++) {printf("%lld ", 1ll * ifac[i] * A[n + i] % mod);}puts("");for (int i = 0; i < lim; i++) {A[i] = B[i] = 0;}}return 0;
}

HDU 6061 RXD and functions(NTT)相关推荐

  1. 【推导】【NTT】hdu6061 RXD and functions(NTT)

    题意:给定一个n次多项式f(x)的各项系数,让你求f(x-Σai)的各项系数. http://blog.csdn.net/v5zsq/article/details/76780053 推导才是最关键的 ...

  2. 2017 多校3 hdu 6061 RXD and functions

    2017 多校3 hdu 6061 RXD and functions(FFT) 题意: 给一个函数\(f(x)=\sum_{i=0}^{n}c_i \cdot x^{i}\) 求\(g(x) = f ...

  3. 【学习笔记】超简单的快速数论变换(NTT)(FFT的优化)(含全套证明)

    整理的算法模板合集: ACM模板 目录 一.前置知识 二.快速数论变换(NTT) 三.NTT证明(和FFT的关系) 四.NTT模板 数组形式的实现 vector形式的实现 点我看多项式全家桶(●^◡_ ...

  4. HDU各种比赛题题解(一)

    HDU各种比赛题题解(一) Gardon-DYGG Contest 1 HDU1178 Heritage from father[水题] - 海岛Blog - CSDN博客 HDU1181 变形课[D ...

  5. 【HDU 2612 Find a Way(BFS)】(兼BFS入门笔记)

    [HDU 2612 Find a Way(BFS)](兼BFS入门笔记) 原题入口: http://acm.hdu.edu.cn/showproblem.php?pid=2612 第一篇在CSDN的博 ...

  6. 【luogu P3803】【模板】多项式乘法(NTT)

    [模板]多项式乘法(NTT) 题目链接:luogu P3803 题目大意 给你两个多项式,要你求它们的卷积. 思路 这次我们写 NTT 的做法. 它的优点就是它可以取模,而且不会有精度问题,而且会比 ...

  7. 【HDU 3400】Line belt(三分法)

    题目链接 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3400 题意 有两条传送带AB和CD,移动速度分别为p,q. 除了传送带的其他区域移动速度为r ...

  8. 快速数论变换(NTT)

    刚学完FFT,干脆把NTT也学了算了 (一)预备知识 关于原根,这里说得蛮详细的百度百科 为什么使用原根呢?为什么原根可以替代\(\omega_{n}\)呢?想知道为什么就看here NTT用到的各种 ...

  9. HDU 1222 Wolf and Rabbit(gcd)

    HDU 1222   Wolf and Rabbit   (最大公约数)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

最新文章

  1. dispatch callback ant design pro 网络请求回调函数
  2. 共识协议(3)比特币之POW
  3. 介绍一个非常实用的Visual Studio Code扩展 - indent-rainbow
  4. C++11中的std::function
  5. c语言插入特定的字符串,C语言实现:将一个字符串插入到另一个字符串的指定位置...
  6. 浙江大学计算机研究生分数线初试单科学科,计算机考研|这两所自划线,单科没过线也能复试?!...
  7. P5068 [Ynoi2015]我回来了
  8. 光轴会聚模型求解世界坐标点流程与公式理解
  9. java 参数值_Java中的参数传值方式
  10. C/C++ stack栈的理解以及使用
  11. android rom 属性 分辨率,ROM的 build.prop参数详解
  12. XML与Web Service基础知识点
  13. 项目管理工具maven
  14. 自定义Silverlight播放器
  15. 华为 静态路由与FTP备份
  16. flutter Android混淆
  17. 2.1 图像验证码(英文验证码、超级鹰)
  18. 晶振对微型计算机的作用,单片机中晶振电路的作用及其常见参数
  19. exlsx表格教程_e某cel表格~的各种基本操作.doc 文档全文预览
  20. python统计excel中重复数据_Python中用pandas对标Excel自带功能——去除重复项

热门文章

  1. 一维数组和二维数组的区别_数组指针和指针数组的区别
  2. win7升级win10正式版_win7告退在即,如何升级到win10?
  3. 值得收藏的Python小技巧:这17个骚操作你都OK吗?
  4. 如何解读决策树和随机森林的内部工作机制?
  5. ubuntu安装matlab2009,Ubuntu中安装Matlab2010a
  6. 多个goruntine 性能变慢_提高 JavaScript 性能的 12 个技巧
  7. mysql sleep详解_sql注入详解(二)
  8. 二维数组各行分别求和_【PyTorch入门】之十分钟看懂二维卷积层的运算、实现及应用...
  9. 计算机专业考研末流211和双非,211大学考985研究生难吗,如何看待本科985学生读研去211学校?...
  10. php 获取对象所有成员变量,PHP成员变量获取对比