标签:
开始想的是O(n2logk)的算法但是显然会tle。看了解题报告然后就打表找起规律来。嘛是组合数嘛。时间复杂度是O(nlogn+n2)的
#include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define clr(x,c) memset(x,c,sizeof(x)) #define ll long long int read(){ int x=0;char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) x=x*10+c-‘0‘,c=getchar(); return x; } const int nmax=5e3+5; const int mod=1e9+7; ll ans[nmax],a[nmax]; ll pow(ll x,int n){ ll res=x;--n; while(n){ if(n&1) res=res*x%mod; x=x*x%mod;n>>=1; } return res; } int main(){ int n=read(),m=read();--m; ans[1]=1; rep(i,2,n) ans[i]=ans[i-1]*(i+m-1)%mod*pow(i-1,mod-2)%mod; ll tp,u; rep(i,1,n) a[i]=read(); rep(i,1,n){ tp=0; rep(j,1,i) tp=(tp+ans[j]*a[i-j+1])%mod; printf("%lld\n",tp); } return 0; }
第1行,2个数N和K,中间用空格分隔,N表示数组的长度,K表示处理的次数(2 <= n <= 5000, 0 <= k <= 10^9, 0 <= a[i] <= 10^9)
共N行,每行一个数,对应经过K次处理后的结果。每次累加后mod 10^9 + 7。
4 2 1 3 5 6
1 5 14 29
标签:
原文地址:http://www.cnblogs.com/fighting-to-the-end/p/5866362.html