【CF932E】Perpetual Subtraction(NTT,线性代数)

题面

洛谷

CF

题解

设\(f_{i,j}\)表示\(i\)轮之后这个数恰好为\(j\)的概率。

得到转移:\(\displaystyle f_{i,j}=\sum_{k=j}^{n}f_{i-1,k}*\frac{1}{k+1}\)。

看成生成函数就有\(\displaystyle F_i(x)=\sum_{j=0}^{n}x^j\sum_{k\ge j}\frac{f_{i-1,k}}{k+1}\)。

把两维换过来就是\(\displaystyle \sum_{k=0}^{n}\frac{f_{i-1,k}}{k+1}\sum_{j=0}^k x^j=\sum_{k=0}^n\frac{f_{i-1,k}}{k+1}\frac{x^{k+1}-1}{x-1}=\frac{1}{x-1}\sum_{k=0}^n\frac{f_{i-1,k}}{k+1}(x^{k+1}-1)\)。

而\(\frac{1}{k+1}\)这个东西非常让人不爽,恰好发现后面有\(x^{k+1},那么我们求导再积分\)

\(\displaystyle F_i(x)=\frac{1}{x-1}\int_{1}^x \sum_{k=0}^n f_{i-1,k}t^kdt=\frac{1}{x-1}\int_{1}^xF_{i-1}(t)dt\)

令\(\displaystyle G_i(x)=F_{i}(x+1)=\frac{1}{x}\int_{1}^{x+1}F_{i-1}(t)dt\)。

进一步有:\(\displaystyle G_i(x)=\frac{1}{x}\int_{0}^xG_{i-1}(t)dt=\sum_{j}\frac{g_{i-1,j}}{j+1}x^j\)。

那么,再把\(G(x)\)拆开,我们可以得到:\(g_{i,j}=\frac{g_{i-1,j}}{j+1}\),所以可以知道\(g_{m,j}=\frac{g_{0,j}}{(j+1)^m}\)。

然后考虑\(g\)怎么求。

有:\(\displaystyle \sum_{i}g_ix^i=\sum_{i}f_i(x+1)^i=\sum_{i}f_i\sum_{j}{i\choose j}x^j\),

所以有\(\displaystyle g_i=\sum_{j\ge i}{j\choose i}f_j\),二项式反演有\(\displaystyle f_i=\sum_{j\ge i}(-1)^{j-i}{j\choose i}g_j\)

那么先用\(f_{0,j}\)求出\(g_{0,j}\),乘上\(\frac{1}{(j-1)^m}\)之后再卷积算回去就行了。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. #include<vector>
  8. using namespace std;
  9. #define ll long long
  10. #define MOD 998244353
  11. #define MAX 280280
  12. inline ll read()
  13. {
  14. ll x=0;bool t=false;char ch=getchar();
  15. while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
  16. if(ch=='-')t=true,ch=getchar();
  17. while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
  18. return t?-x:x;
  19. }
  20. int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
  21. int W[MAX],r[MAX];
  22. void NTT(int *P,int len,int opt)
  23. {
  24. int l=0,N;for(N=1;N<len;N<<=1)++l;
  25. for(int i=0;i<N;++i)r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
  26. for(int i=0;i<N;++i)if(i<r[i])swap(P[i],P[r[i]]);
  27. for(int i=1;i<N;i<<=1)
  28. {
  29. int w=fpow(3,(MOD-1)/(i<<1));W[0]=1;
  30. for(int k=1;k<i;++k)W[k]=1ll*W[k-1]*w%MOD;
  31. for(int p=i<<1,j=0;j<N;j+=p)
  32. for(int k=0;k<i;++k)
  33. {
  34. int X=P[j+k],Y=1ll*P[i+j+k]*W[k]%MOD;
  35. P[j+k]=(X+Y)%MOD;P[i+j+k]=(X+MOD-Y)%MOD;
  36. }
  37. }
  38. if(opt==-1)
  39. {
  40. reverse(&P[1],&P[N]);
  41. for(int i=0,inv=fpow(N,MOD-2);i<N;++i)P[i]=1ll*P[i]*inv%MOD;
  42. }
  43. }
  44. int n,m,a[MAX],b[MAX],jc[MAX],jv[MAX],inv[MAX];
  45. int main()
  46. {
  47. n=read();m=read()%(MOD-1);int N;for(N=1;N<=n+n;N<<=1);
  48. for(int i=0;i<=n;++i)a[i]=read();
  49. jc[0]=jv[0]=inv[0]=inv[1]=1;
  50. for(int i=2;i<=n+1;++i)inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;
  51. for(int i=1;i<=n+1;++i)jc[i]=1ll*jc[i-1]*i%MOD;
  52. for(int i=1;i<=n+1;++i)jv[i]=1ll*jv[i-1]*inv[i]%MOD;
  53. for(int i=0;i<=n;++i)a[i]=1ll*a[i]*jc[i]%MOD,b[i]=jv[i];
  54. reverse(&a[0],&a[n+1]);
  55. NTT(a,N,1);NTT(b,N,1);
  56. for(int i=0;i<N;++i)a[i]=1ll*a[i]*b[i]%MOD;
  57. NTT(a,N,-1);
  58. for(int i=0;i<=n;++i)a[i]=1ll*a[i]*fpow(inv[n-i+1],m)%MOD*((i&1)?MOD-1:1)%MOD;
  59. for(int i=n+1;i<N;++i)a[i]=0;
  60. NTT(a,N,1);
  61. for(int i=0;i<N;++i)a[i]=1ll*a[i]*b[i]%MOD;
  62. NTT(a,N,-1);
  63. for(int i=0;i<=n;++i)a[i]=1ll*a[i]*((i&1)?MOD-1:1)%MOD*jv[n-i]%MOD;
  64. reverse(&a[0],&a[n+1]);
  65. for(int i=0;i<=n;++i)printf("%d ",a[i]);puts("");
  66. return 0;
  67. }

【CF932E】Perpetual Subtraction(NTT,线性代数)的更多相关文章

  1. Codeforces 947E Perpetual Subtraction (线性代数、矩阵对角化、DP)

    手动博客搬家: 本文发表于20181212 09:37:21, 原地址https://blog.csdn.net/suncongbo/article/details/84962727 呜啊怎么又是数学 ...

  2. Codeforces 923E - Perpetual Subtraction(微积分+生成函数+推式子+二项式反演+NTT)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 首先考虑最朴素的 \(dp\),设 \(dp_{z,i}\) 表示经 ...

  3. CF923E Perpetual Subtraction

    生成函数好题! 搬一手铃悬的题解(侵删) 现在只需要考虑怎么求出g和逆变换即可,其实也就是对函数F(x)求F(x+1)和F(x-1). 直接二项式定理展开发现是个卷积的形式,大力NTT即可. #inc ...

  4. Solution -「CF 923E」Perpetual Subtraction

    \(\mathcal{Description}\)   Link.   有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...

  5. ZJOI2018游记Round1

    广告 ZJOI2018Round2游记 All Falls Down 非常感谢学弟学妹们捧场游记虽然这是一篇假游记 ZJOI Round1今天正式落下帷幕.在这过去的三天里遇到了很多朋友,见识了很多有 ...

  6. 【CF932E】Team Work/【BZOJ5093】图的价值 数学+NTT

    [CF932E]Team Work 题意:求$\sum\limits_{i=1}^nC_n^ii^k$,答案模$10^9+7$.$n\le 10^9,k\le 5000$. [BZOJ5093]图的价 ...

  7. [CF932E]Team Work & [BZOJ5093]图的价值

    CF题面 题意:求\(\sum_{i=0}^{n}\binom{n}{i}i^k\) \(n\le10^9,k\le5000\) 模\(10^9+7\) BZOJ题面 题意:求\(n*2^{\frac ...

  8. 【线性代数】2-4:矩阵操作(Matrix Operations)

    title: [线性代数]2-4:矩阵操作(Matrix Operations) toc: true categories: Mathematic Linear Algebra date: 2017- ...

  9. FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ

    因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ u1s1 我预感还会有Ⅲ 多项式基础操作: 例题: 26. CF438E The Child and Binary Tree 感觉这题作为第一题还 ...

随机推荐

  1. jquery中的$.fn的用法

    JQuery里的原型prototype分析       http://www.nowamagic.net/librarys/veda/detail/653 jquery中的$.fn的用法       ...

  2. python3 爬取boss直聘职业分类数据(未完成)

    import reimport urllib.request # 爬取boss直聘职业分类数据def subRule(fileName): result = re.findall(r'<p cl ...

  3. java的设计模式 - 静态工厂方法

    静态工厂方法,也不知道为何叫这个名字.其实也就是一个静态函数,可以替代构造函数用.大名鼎鼎的 guava 就大量使用这种模式,这是非常有用的模式. 比如是 Integer i = Integer.va ...

  4. 禁用事件event默认行为

    在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转到该元素href属性指定的页. js中return false作用一般是 ...

  5. 微信小程序之菜鸟入门教学(二)

    昨天学习了一些简单的概念,今天开始实际操作,通过搭建简单的计算器来学习小程序的架构 一.小程序框架 程序框架如上图所示.由此可见,框架的基本构成为: 1. app.js . app.wxss 2. a ...

  6. 如何做好SQLite 使用质量检测,让事故消灭在摇篮里

    本文由云+社区发表 SQLite 在移动端开发中广泛使用,其使用质量直接影响到产品的体验. 常见的 SQLite 质量监控一般都是依赖上线后反馈的机制,比如耗时监控或者用户反馈.这种方式问题是: 事后 ...

  7. IDEA中的.iml文件和.idea文件夹

    .iml文件 iml文件是IntelliJ IDEA自动创建的模块文件,用于Java应用开发,存储一些模块开发相关的信息,比如一个Java组件,插件组件,Maven组件等等,还可能存储一些模块路径信息 ...

  8. appium入门元素识别参考

    https://www.cnblogs.com/miniren/p/7365885.html#top

  9. 测者的测试技术手册:测试应该关注java.util.List.subList的坑

    java中有一个返回子列表的方法: public list<E> subList(int fromIndex, int toIndex){       subListRangeCheck( ...

  10. java获取机器IP地址常用方法

    private String getHostIP(){ Enumeration<NetworkInterface> allNetInterfaces = null; String resu ...