CF223C Partial Sums

将前缀和看成乘上 1+x+x1+x2+...+xn,快速幂加多项式乘法即可。

考虑先前缀和一次,将 k1

考虑记 k 阶前缀和为 sum(k,i)

那么 sum(k,i)=sum(k,i1)+sum(k1,i)

抽象成网格图上的游走,每次可以向下或者向右走一格。

第一行的点对第 k 行的点的贡献就是每次不同方式走到那就贡献 +1,即路径数。

于是先做一次前缀和,将 k1,那么对于 (1,j) 走到 (k,i) 的方案数就是 Ck+ij1ij

预处理下差值阶乘即可。

#include <bits/stdc++.h> #define int long long #define pb push_back using namespace std; const int mod=(int)(1e9+7),N=2005; int a[N],b[N],ans[N],tmp[N],n,k; int fpow(int x,int y) { int res=1; while(y) { if(y&1) res=res*x%mod; y>>=1; x=x*x%mod; } return res; } int djie[N],jie[N],jjie[N]; int C(int n,int m) { if(m>n||n<0) return 0; int res=djie[m]*jjie[n-(n-m+1)+1]%mod; return res; } //jie[n]*djie[m]*djie[n-m] signed main() { cin.tie(0); ios::sync_with_stdio(false); cin>>n>>k; djie[0]=jie[0]=1; for(int i=1;i<=n;i++) jie[i]=jie[i-1]*i%mod,djie[i]=fpow(jie[i],mod-2); for(int i=1;i<=n;i++) { cin>>a[i]; // b[i]=ans[i]=1; } if(!k) { for(int i=1;i<=n;i++) cout<<a[i]<<' '; return 0; } for(int i=1;i<=n;i++) a[i]=(a[i-1]+a[i])%mod; --k; if(!k) { for(int i=1;i<=n;i++) cout<<a[i]<<' '; return 0; } jjie[0]=1; for(int i=1;i<=n;i++) jjie[i]=jjie[i-1]*(k+i-1)%mod; for(int i=1;i<=n;i++) { int qwq=0; for(int j=1;j<=i;j++) { // cout<<i<<" "<<j<<" "<<C(k+i-j-1,i-j)<<'\n'; qwq=(qwq+C(k+i-j-1,i-j)*a[j]%mod)%mod; } cout<<qwq<<' '; } // (1,j)->(k,i) return 0; }
#include <bits/stdc++.h> #define int long long #define pb push_back using namespace std; const int mod=(int)(1e9+7),N=2005; int a[N],b[N],ans[N],tmp[N],n,k; void mul(int *f,int *g) { for(int i=0;i<=n;i++) tmp[i]=0; for(int i=0;i<=n;i++) { for(int j=0;j+i<=n;j++) { tmp[j+i]=(tmp[j+i]+f[i]*g[j]%mod)%mod; } } for(int i=0;i<=n;i++) f[i]=tmp[i]; } signed main() { cin.tie(0); ios::sync_with_stdio(false); cin>>n>>k; b[0]=ans[0]=1; for(int i=1;i<=n;i++) { cin>>a[i]; b[i]=ans[i]=1; } if(!k) { for(int i=1;i<=n;i++) cout<<a[i]<<' '; return 0; } --k; while(k) { if(k&1) mul(ans,b); mul(b,b); k>>=1; } mul(a,ans); for(int i=1;i<=n;i++) cout<<a[i]<<' '; return 0; }

__EOF__

本文作者F x o r G
本文链接https://www.cnblogs.com/xugangfan/p/16477548.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   FxorG  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示