CF1842G Tenzing and Random Operations 思考
借鉴了一下 namelessgugugu 的想法,妙妙题。
这个神奇工具的构造确实挺妙的,非常好的思维题,在此记录一下
代码
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=5e3+10,mod=1e9+7;
int n,m,v,a[N];
int f[N][N];
ll qpow(ll x,ll y=mod-2){
ll ans=1;
for(;y;(x*=x)%=mod,y>>=1)if(y&1)(ans*=x)%=mod;
return ans;
}
int main(){
freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>n>>m>>v;
for(int i=1;i<=n;i++)cin>>a[i];
f[0][0]=1;
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
f[i+1][j]=(f[i+1][j]+1ll*f[i][j]*a[i+1])%mod;
f[i+1][j]=(f[i+1][j]+1ll*f[i][j]*v%mod*j)%mod;
f[i+1][j+1]=(f[i+1][j+1]+1ll*f[i][j]*(i+1)%mod*(m-j)%mod*v)%mod;
}
}
int ans=0,iv=qpow(n),now=1;
for(int i=0;i<=n;i++,now=1ll*now*iv%mod){
ans=(ans+1ll*f[n][i]*now)%mod;
}
cout<<ans;
return 0;
}