题面

传送门

题解

统计\(k\)阶前缀和,方法和这题一样

然后这里\(n\)比较大,那么把之前的柿子改写成

\[s_{j,k}=\sum_{i=1}^ja_i{j-i+k-1\choose j-i}=\sum_{i=1}^na_i{(j-i+k-1)^{\underline{j-i}}\over (j-i)!}
\]

就可以化成卷积形式了

  1. //minamoto
  2. #include<bits/stdc++.h>
  3. #define R register
  4. #define ll long long
  5. #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
  6. #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
  7. #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
  8. using namespace std;
  9. char buf[1<<21],*p1=buf,*p2=buf;
  10. inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
  11. int read(){
  12. R int res,f=1;R char ch;
  13. while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
  14. for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
  15. return res*f;
  16. }
  17. ll readll(){
  18. R ll res,f=1;R char ch;
  19. while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
  20. for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
  21. return res*f;
  22. }
  23. char sr[1<<21],z[20];int C=-1,Z=0;
  24. inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
  25. void print(R int x){
  26. if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;
  27. while(z[++Z]=x%10+48,x/=10);
  28. while(sr[++C]=z[Z],--Z);sr[++C]='\n';
  29. }
  30. const int N=(1<<18)+5,P=998244353;
  31. inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
  32. inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
  33. inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
  34. int ksm(R int x,R int y){
  35. R int res=1;
  36. for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);
  37. return res;
  38. }
  39. int r[N],rt[2][N],inv[N],a[N],c[N];
  40. int lim,d,ilim,n,k;
  41. void Pre(){
  42. lim=1,d=0;while(lim<(n<<1))lim<<=1,++d;ilim=ksm(lim,P-2);
  43. inv[0]=inv[1]=1;fp(i,2,n)inv[i]=mul(P-P/i,inv[P%i]);
  44. c[0]=1;fp(i,1,n-1)c[i]=1ll*c[i-1]*(i+k-1)%P*inv[i]%P;
  45. fp(i,1,lim-1)r[i]=(r[i>>1]>>1)|((i&1)<<(d-1));
  46. for(R int t=(P-1)>>1,i=1,x,y;i<lim;i<<=1,t>>=1){
  47. x=ksm(3,t),y=ksm(332748118,t),rt[0][i]=rt[1][i]=1;
  48. fp(k,1,i-1)
  49. rt[1][i+k]=mul(rt[1][i+k-1],x),
  50. rt[0][i+k]=mul(rt[0][i+k-1],y);
  51. }
  52. }
  53. void NTT(int *A,int ty){
  54. fp(i,0,lim-1)if(i<r[i])swap(A[i],A[r[i]]);
  55. for(R int mid=1;mid<lim;mid<<=1)
  56. for(R int j=0,t;j<lim;j+=(mid<<1))
  57. fp(k,0,mid-1)
  58. A[j+k+mid]=dec(A[j+k],t=mul(rt[ty][mid+k],A[j+k+mid])),
  59. A[j+k]=add(A[j+k],t);
  60. if(!ty)fp(i,0,lim-1)A[i]=mul(A[i],ilim);
  61. }
  62. int main(){
  63. // freopen("testdata.in","r",stdin);
  64. n=read(),k=readll()%P;
  65. fp(i,0,n-1)a[i]=read();
  66. Pre();
  67. NTT(a,1),NTT(c,1);
  68. fp(i,0,lim-1)a[i]=mul(a[i],c[i]);
  69. NTT(a,0);
  70. fp(i,0,n-1)print(a[i]);
  71. return Ot(),0;
  72. }

loj#6261. 一个人的高三楼(NTT+组合数学)的更多相关文章

  1. LOJ #6261 一个人的高三楼

    生成函数和组合数学的灵活应用 LOJ #6261 题意:求一个数列的$ k$次前缀和 $ Solution:$ 我们对原数列$ a$建生成函数$ A=\sum\limits_{i=0}^{n-1} a ...

  2. loj #6261 一个人的高三楼 FFT + 组合数递推

    \(\color{#0066ff}{ 题目描述 }\) 一天的学习快要结束了,高三楼在晚自习的时候恢复了宁静. 不过,\(HSD\) 桑还有一些作业没有完成,他需要在这个晚自习写完.比如这道数学题: ...

  3. 【NTT】loj#6261. 一个人的高三楼

    去年看过t老师写这题博客:以为是道神仙题 题目大意 求一个数列的$k$次前缀和.$n\le 10^5$. 题目分析 [计数]cf223C. Partial Sums 加强版.注意到最后的式子是$f_i ...

  4. BZOJ3028 食物 和 LOJ6261 一个人的高三楼

    总结一下广义二项式定理. 食物 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数 ...

  5. XJOI 夏令营501-511NOIP训练18 高三楼

    参观完各种饭堂,学校还有什么著名的景点呢?当然是教室了,此时此刻我 们来到了高三楼.你会发现高三楼门口会有以身份认证系统,这东西还有着一段疼人的历史.每年的九月到来,高三的童鞋大多不习惯学校的作息时间 ...

  6. 「loj#6261」一个人的高三楼

    题目 显然存在一个这样的柿子 \[S^{(k)}_i=\sum_{j=1}^iS^{(k-1)}_j\] 我们可以视为\(S^{(k)}\)就是由\(S^{(k-1)}\)卷上一个长度为\(n\)全是 ...

  7. loj#2020 「AHOI / HNOI2017」礼物 ntt

    loj#2020 「AHOI / HNOI2017」礼物 链接 bzoj没\(letex\),差评 loj luogu 思路 最小化\(\sum\limits_1^n(a_i-b_i)^2\) 设改变 ...

  8. [LOJ6261]一个人的高三楼

    loj description 给你一个长度为\(n\)的数列\(a_i\),求它的\(k\)次前缀和模\(998244353\).(就是做\(k\)次前缀和后的数列) \(n\le10^5,k\le ...

  9. 夏令营501-511NOIP训练18——高三楼

    传送门:QAQQAQ 题意:定义矩阵A与矩阵B重复,当且仅当A可以通过任意次行列交换得到B,例如下图A,B即为合法矩阵 现求对于$n*n$的矩阵有多少个不重复的矩阵 数据范围: 对于10%的数据 N≤ ...

随机推荐

  1. Centos7安装jekyll

    1.首先需要安装相应的依赖包及所需要的工具 sudo yum install nodejs npm ruby ruby-devel rubygems git 2.修改gem源 国内 使用的淘宝的更新源 ...

  2. AlphaTesting

    [Alpha Testing] The alpha test is a last chance to reject a pixel from being written to the screen. ...

  3. boxing & unboxing

    [boxing & unboxing] Boxing is the process of converting a value type to the type object or to an ...

  4. Unable to resolve module `../res/images/ic_popular.png`

  5. 398. Random Pick Index随机pick函数

    [抄题]: Given an array of integers with possible duplicates, randomly output the index of a given targ ...

  6. mysql数据库优化总结 有图 有用

    对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要.一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库设计.sql语句优化.数据库参数配置.恰当的硬件资源 ...

  7. qy Undefied index报错

    目测是不支持如下写法 $value['status'] = $map[$value['status']];

  8. [Schema] I have updated my XML Schema for my service but SoapUI still generates/validates according to the old schema.

    SoapUI caches XML schemas when they are first loaded. If you need to force a reload of an interfaces ...

  9. debian 9 更换源 使用国内源 配置方法

    配置前请先参考: https://wiki.debian.org/SourcesList https://www.debian.org/mirror/list https://mirrors.tuna ...

  10. python 数据清洗

    前言 1. 删除重复 2. 异常值监测 3. 替换 4. 数据映射 5. 数值变量类型化 6. 创建哑变量 统计师的Python日记[第7天:数据清洗(1)] 前言 根据我的Python学习计划: N ...