[组合数] 51Nod 1161 Partial Sums & Codeforces 223C #138 (Div. 1) Partial Sums

来源:互联网 发布:用友软件版本介绍 编辑:程序博客网 时间:2024/05/18 12:41

自己手推就能发现是个斜着的杨辉三角


#include<cstdio>#include<cstdlib>#include<algorithm>  using namespace std;typedef long long ll;const int P=1000000007;const int N=5005;int n,K;ll a[N];ll inv[N];inline void Pre(){  inv[1]=1;  for (int i=2;i<=5000;i++) inv[i]=(P-P/i)*inv[P%i]%P;}      inline ll C(ll n,ll m) {    ll ret=1;    for (int i=1;i<=m;i++)      ret=ret*inv[i]%P*(n-i+1)%P;    return ret;  }        ll c[N];        int main(){  freopen("t.in","r",stdin);  freopen("t.out","w",stdout);  Pre();  while (scanf("%d%d",&n,&K)==2){      for (int i=0;i<n;i++)       scanf("%lld",a+i);      if (!K){        for(int i=0;i<n;i++) printf("%lld\n",a[i]);       continue;    }    for (int i=0;i<n;i++)        c[i]=C(i+K-1,i);      for (int i=0;i<n;i++) {        ll ret=0ll;        for (int j=0;j<=i;j++)ret=(ret+a[j]*c[i-j]%P)%P;        printf("%lld\n",ret);      }  }    return 0;  }  


0 0
原创粉丝点击