Partial Sums 51Nod - 1161
阿新 • • 發佈:2018-12-12
https://www.51nod.com/Challenge/Problem.html#!#problemId=1161
公式比較好推 紙上一畫就有了 然後就是求組合數 智障啊 就想著c(n,k)中n可能大於等於mod 然後想怎麼盧卡斯 怎麼分段。。
要求的組合數為c(k+i-2,i-1) 有c(n+1,k+1)=(n+1)*c(n,k)/(k+1) 直接迴圈暴力求就行
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1e9+7; const int maxn=5e3+10; const int maxm=1e3+10; ll pre[maxn],inv[maxn],ary[maxn]; int n,k; void init() { ll i; inv[1]=1; for(i=2;i<=5000;i++) inv[i]=((mod-mod/i)*inv[mod%i])%mod; pre[1]=1; for(i=2;i<=5000;i++) pre[i]=((pre[i-1]*(k+i-2))%mod*inv[i-1])%mod; } int main() { ll ans; int i,j; scanf("%d%d",&n,&k); init(); for(i=1;i<=n;i++) scanf("%lld",&ary[i]); for(i=1;i<=n;i++){ ans=0; for(j=1;j<=i;j++){ ans=(ans+(pre[j]*ary[(i-j+1)])%mod)%mod; } printf("%lld\n",ans); } return 0; }