BSOJ5650题解
懒得写线性做法了,写个斯特林数混过去吧。其实是自己不熟悉
\[\sum_{i=1}^{n}i^kr^i
\]
\[\sum_{i=1}^{n}\sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}i^{\underline{j}}r^i
\]
\[\sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}\sum_{i=0}^{n}i^{\underline{j}}r^i
\]
\[\sum_{i=j}^{n}i^{\underline{j}}r^i
\]
这玩意儿好像不能做?
递推!
设 \(F[j]=\sum_{i=j}^{n}i^{\underline{j}}r^i\)。
\[\sum_{i=j}^{n}(i-1)^{\underline{j}}r^i+j\times(i-1)^{\underline{j-1}}r^i
\]
\[r\sum_{i=j}^{n-1}i^{\underline{j}}r^i+j\times r\sum_{i=j-1}^{n-1}i^{\underline{j-1}}r^i
\]
\[F[j]=r\times(F[j]-n^{\underline{j}}r^n)+j\times r\times(F[j-1]-n^{\underline{j-1}}r^n)
\]
\[F[j]=\frac{(n^{\underline{j}}+j\times n^{\underline{j-1}})r^{n+1}-j\times r\times F[j-1]}{r-1}
\]
复杂度 \(O(k^2)\)。
#include<cstdio>
typedef unsigned ui;
typedef unsigned long long ull;
const ui M=2005,mod=1e9+7;
ui T,k,r,S[M],F[M],pw[M];ull n,R;
inline ui pow(ui a,ui b=mod-2){
ui ans(1);for(;b;b>>=1,a=1ull*a*a%mod)if(b&1)ans=1ull*ans*a%mod;return ans;
}
signed main(){
scanf("%u",&T);
while(T--){
ui N,rn,inv,ans(0);scanf("%llu%u%llu",&n,&k,&R);S[0]=1;pw[0]=1;
N=n%mod;r=R%mod;rn=pow(r,(n+1)%(mod-1));inv=pow(r-1,mod-2);F[0]=(rn-1ull)*inv%mod;
if(!r){printf("0\n");continue;}
for(ui i=1;i<=k;++i){
pw[i]=pw[i-1]*(N+mod-i+1ull)%mod;
for(ui j=i;j>=1;--j)S[j]=(S[j-1]+1ull*j*S[j])%mod;S[0]=0;
}
for(ui i=1;i<=k;++i)F[i]=(1ull*(pw[i]+1ull*i*pw[i-1])%mod*rn+1ull*(mod-r)*i%mod*F[i-1])%mod*inv%mod;
for(ui i=0;i<=k;++i)ans=(ans+1ull*S[i]*F[i])%mod;printf("%u\n",ans);
for(ui i=0;i<=k;++i)S[i]=F[i]=pw[i]=0;
}
}