每次NTT都忘记初始化,真的是写一个小时,Debug两个小时- -

  1. /*
  2. HDU 6061 - RXD and functions [ NTT ] | 2017 Multi-University Training Contest 3
  3. 题意:
  4. 给定多项式 F(x) = ∑[0<=i<=n] f(i)*x^i
  5. 求多项式 G(x) = F(x-a)
  6. n <= 1e5
  7. 分析:
  8. 设 G(x) = ∑ g(i)*x^i
  9. 将 F(x-a) 按二项式定理展开后易得:
  10. g(x) = ∑[x<=y<=n] Comb(y,x) * f(y) * (-a)^(y-x)
  11. 打开组合数,移项:
  12. g(x)*x! = ∑[x<=y<=n] f(y)*y! * (-a)^(y-x) / (y-x)!
  13. 设 g'(x) = g(x)*x!
  14. p(x) = f(y)*y!
  15. q(x) = (-a)^x/x!
  16. 则 g'(x) = ∑[x<=y<=n] p(y) * q(y-x)
  17. = ∑[1<=y<=n-x] p(y+x) * q(y)
  18. 设 g''(x) = g'(n-x)
  19. 则 g''(x) = ∑[1<=y<=x] p(n-(x-y)) * q(y)
  20. 设 p'(x) = p(n-x)
  21. 则 g''(x) = ∑[1<=y<=x] p'(x-y) * q(y)
  22. 算出这个卷积后回带即可
  23. */
  24. #include <bits/stdc++.h>
  25. using namespace std;
  26. #define LL long long
  27. const int N = 1e5+5;
  28. const LL MOD = 998244353;
  29. namespace NTT {
  30. const int G = 3;
  31. const int NUM = 20;
  32. LL wn[20];
  33. LL mul(LL x, LL y) {
  34. return x*y% MOD;
  35. }
  36. LL PowMod(LL a, LL b) {
  37. LL res = 1;
  38. a %= MOD;
  39. while (b) {
  40. if (b&1) res = mul(res, a);
  41. a = mul(a, a);
  42. b >>= 1;
  43. }
  44. return res;
  45. }
  46. void Init() {
  47.  
  48. for (int i = 0; i < NUM; i++)
  49. {
  50. int t = 1<<i;
  51. wn[i] = PowMod(G, (MOD-1)/t);
  52. }
  53. }
  54. void Change(LL a[], int len)
  55. {
  56. int i, j, k;
  57. for (i = 1, j = len/2; i < len-1; i++)
  58. {
  59. if (i < j) swap(a[i], a[j]);
  60. k = len/2;
  61. while (j >= k) {
  62. j -= k;
  63. k /= 2;
  64. }
  65. if (j < k) j += k;
  66. }
  67. }
  68. void NTT(LL a[], int len, int on)
  69. {
  70. Change(a, len);
  71. int id = 0;
  72. for (int h = 2; h <= len; h <<= 1)
  73. {
  74. id++;
  75. for (int j = 0; j < len; j += h)
  76. {
  77. LL w = 1;
  78. for (int k = j; k < j + h/2; k++)
  79. {
  80. LL u = a[k] % MOD;
  81. LL t = mul(a[k+h/2], w);
  82. a[k] = (u+t) % MOD;
  83. a[k+h/2] = ((u-t)% MOD + MOD ) % MOD;
  84. w = mul(w, wn[id]);
  85. }
  86. }
  87. }
  88. if (on == -1) {
  89. for (int i = 1; i < len/2; i++)
  90. swap(a[i], a[len-i]);
  91. LL inv = PowMod(len, MOD-2);
  92. for (int i = 0; i < len; i++)
  93. a[i] = mul(a[i], inv);
  94. }
  95. }
  96. void solve(LL a[], int n, LL b[], int m)
  97. {
  98. int len = 1;
  99. while (len < n*2 || len < m*2) len <<= 1;
  100. for (int i = n; i < len; i++) a[i] = 0;
  101. for (int i = m; i < len; i++) b[i] = 0;
  102. NTT(a, len, 1);
  103. NTT(b, len, 1);
  104. for (int i = 0; i < len; i++) a[i] = mul(a[i], b[i]);
  105. NTT(a, len, -1);
  106. }
  107. }
  108. LL f[N], p[N<<3], q[N<<3];
  109. LL a;
  110. int n, m;
  111. LL F[N], Finv[N], inv[N];
  112. void init(){
  113. inv[1] = 1;
  114. for (int i = 2; i < N; i++) {
  115. inv[i] = (MOD-MOD/i) * inv[MOD%i] % MOD;
  116. }
  117. F[0] = Finv[0] = 1;
  118. for (int i = 1; i < N; i++){
  119. F[i] = F[i-1] * i % MOD;
  120. Finv[i] = Finv[i-1] * inv[i] % MOD;
  121. }
  122. }
  123. void solve()
  124. {
  125. for (int i = 0; i <= n; i++)
  126. p[i] = F[i] * f[i] % MOD;//p(x)
  127. q[0] = 1;
  128. for (int i = 1; i <= n; i++)
  129. q[i] = q[i-1] * (MOD-a) % MOD * inv[i] % MOD;//q(x)
  130. for (int i = 0; i <= n/2; i++)
  131. swap(p[i], p[n-i]);//p'(x)
  132. NTT::solve(p, n+1, q, n+1);//g''(x)
  133. for (int i = 0; i <= n/2; i++)
  134. swap(p[i], p[n-i]);//g'(x)
  135. for (int i = 0; i <= n; i++)
  136. p[i] = p[i] * Finv[i] % MOD;//g(x)
  137. }
  138. int main()
  139. {
  140. init();
  141. NTT::Init();
  142. while (~scanf("%d", &n))
  143. {
  144. for (int i = 0; i <= n; i++) scanf("%lld", &f[i]);
  145. scanf("%d", &m);
  146. a = 0;
  147. for (int i = 1; i <= m; i++)
  148. {
  149. LL x; scanf("%lld", &x);
  150. a = (a+x) % MOD;
  151. }
  152. solve();
  153. for (int i = 0; i <= n; i++) printf("%lld ", p[i]);
  154. puts("");
  155. }
  156. }

  

HDU 6061 - RXD and functions | 2017 Multi-University Training Contest 3的更多相关文章

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

  2. HDU 6061 RXD and functions NTT

    RXD and functions Problem Description RXD has a polynomial function f(x), f(x)=∑ni=0cixiRXD has a tr ...

  3. HDU 6061 RXD and functions(NTT)

    题意 给定一个\(n​\) 次的 \(f​\) 函数,向右移动 \(m​\) 次得到 \(g​\) 函数,第 \(i​\) 次移动长度是 \(a_i​\) ,求 \(g​\) 函数解析式的各项系数,对 ...

  4. HDU 6061 RXD and functions

    题目链接:HDU-6061 题意:给定f(x),求f(x-A)各项系数. 思路:推导公式有如下结论: 然后用NTT解决即可. 代码: #include <set> #include < ...

  5. HDU 6060 - RXD and dividing | 2017 Multi-University Training Contest 3

    /* HDU 6060 - RXD and dividing [ 分析,图论 ] | 2017 Multi-University Training Contest 3 题意: 给一个 n 个节点的树, ...

  6. HDU 6063 - RXD and math | 2017 Multi-University Training Contest 3

    比赛时候面向过题队伍数目 打表- - 看了题解发现确实是这么回事,分析能力太差.. /* HDU 6063 - RXD and math [ 数学,规律 ] | 2017 Multi-Universi ...

  7. HDU 6162 - Ch’s gift | 2017 ZJUT Multi-University Training 9

    /* HDU 6162 - Ch’s gift [ LCA,线段树 ] | 2017 ZJUT Multi-University Training 9 题意: N节点的树,Q组询问 每次询问s,t两节 ...

  8. 2017 Wuhan University Programming Contest (Online Round) Lost in WHU 矩阵快速幂 一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。

    /** 题目:Lost in WHU 链接:https://oj.ejq.me/problem/26 题意:一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开. ...

  9. 2017 Wuhan University Programming Contest (Online Round) C. Divide by Six 分析+模拟

    /** 题目:C. Divide by Six 链接:https://oj.ejq.me/problem/24 题意:给定一个数,这个数位数达到1e5,可能存在前导0.问为了使这个数是6的倍数,且没有 ...

随机推荐

  1. INI配置文件格式解析

    INI配置文件有三要素parameters,sections和comments. 1.parameters 指一条配置,就像key = value这样的. 2.sections sections是pa ...

  2. 【AtCoder】AGC004

    AGC004 A - Divide a Cuboid 看哪一维是偶数,答案是0,否则是三个数两两组合相乘中最小的那个 #include <bits/stdc++.h> #define fi ...

  3. (六)springMvc 和 mybatis 整合

    目录 文章目录 @[toc] 整合 dao 层 整合 springMvc #整合思路 整合是将spring 看做是一个大的容器,将其他东西整合进来,是以 spring 为大环境的: 整合 spring ...

  4. urllib基础

    import urllib.request # urlretrieve(网址,本地路径) 直接下载网页到本地 urllib.request.urlretrieve("http://www.b ...

  5. S02_CH01_Hello World实验

    S02_CH01_Hello World实验 ZYNQ是一款SOC芯片,在前面第一季的学习当中,我们只是粗略的学习了ZYNQ的PL部分,对于ZYNQ最突出的功能,其内部的双核Cortex-A9内核并未 ...

  6. 牛客 133D 挑选队友 (分治FFT)

    大意: $n$个人, 分别属于$m$个组, 要求选出$k$个人, 使得每组至少有一人, 求方案数. 显然答案为$\prod((1+x)^{a_i}-1)$的第$k$项系数, 分治$FFT$即可. #i ...

  7. Windows编程 Windows程序的生与死(上)

    引子 “Windows 程序分为‘程序代码’和‘UI(User Interface)资源’两大部份,两部份最后以RC编译器(资源编译器)整合为一个完整的EXE 文件.所谓UI 资源是指功能菜单.对话框 ...

  8. 基于create-react-app脚手架,按需加载antd组件以及less样式

    摘要 为了更好的书写css样式,在react中引入less,在网上查询了许多关于react引入less样式文件的资料,大多数都是需要在react项目中npm run eject暴露出底层文件,然后在底 ...

  9. 将二维数组转换成一维数组(基于reduce)

    reduce:不改变原数组,返回一个新的数组.就是遍历数组元素,从头开始,依次往下,第一个参数是上一次的返回值,第二个参数是下一个数组元素,首次的时候第一个和第二个参数分别是 array[0],  a ...

  10. 【转】axios用post提交的数据格式

    本文链接:https://blog.csdn.net/wopelo/article/details/78783442vue框架推荐使用axios来发送ajax请求,之前我还写过一篇博客来讲解如何在vu ...