CF223C Partial Sums
作者:互联网
典
将前缀和看成乘上 \(1+x+x^1+x^2+...+x^n\),快速幂加多项式乘法即可。
考虑先前缀和一次,将 \(k-1\)。
考虑记 \(k\) 阶前缀和为 \(sum_{(k,i)}\)
那么 \(sum_{(k,i)}=sum_{(k,i-1)}+sum_{(k-1,i)}\)
抽象成网格图上的游走,每次可以向下或者向右走一格。
第一行的点对第 \(k\) 行的点的贡献就是每次不同方式走到那就贡献 \(+1\),即路径数。
于是先做一次前缀和,将 \(k-1\),那么对于 \((1,j)\) 走到 \((k,i)\) 的方案数就是 \(C^{i-j}_{k+i-j-1}\)
预处理下差值阶乘即可。
#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;
}
标签:Partial,int,res,sum,Sums,long,ans,define,CF223C 来源: https://www.cnblogs.com/xugangfan/p/16477548.html