D展开全文即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
#define fi first
#define se second
#define pk push_back
#define mk make_pair
const ll N=5e2+10, mod=998244353, inf=0x3f3f3f3f3f3f3f3f;
ll peo[N], prof[N], pro[N], tmp[N], ans[N], a, b, c, n, k;
ll qmi(ll a,ll b,ll m=mod){
ll res=1;
while(b){
if(b&1) res=res*a%m;
b>>=1, a=a*a%m;
}
return res;
}
void mul(ll a[], ll b[],ll res[]){
for(ll i=0;i<n;i++) res[i]=0;
for(ll i=0;i<n;i++)
for(ll j=0;j<n;j++)
res[(i+j)%n]+=a[i]*b[j]%mod, res[(i+j)%n]%=mod;
return ;
}
void atob(ll a[], ll b[]) {
for(ll i=0;i<n;i++)
b[i]=a[i];
}
void work(){
cin>>n>>k;
cin>>a>>b>>c;
for(ll i=0;i<n;i++) scanf("%lld",&peo[i]);
ll s=a+b+c, p1=a*qmi(s,mod-2)%mod, p2=b*qmi(s,mod-2)%mod, p3=c*qmi(s,mod-2)%mod;
prof[0]=p3, prof[1]=p1, prof[n-1]=p2; pro[0]=1;
while(k){
if(k&1) mul(pro,prof,tmp), atob(tmp, pro);
mul(prof,prof,tmp), atob(tmp, prof);puts("");
k>>=1;
}
for(ll i=0;i<n;i++)
for(ll j=0;j<n;j++)
ans[(i+j)%n]+=peo[i]*pro[j]%mod, ans[(i+j)%n]%=mod;
for(ll i=0;i<n;i++)
printf("%lld ",ans[i]);
return ;
}
int main() {
// ll t;
// for(cin>>t;t--;)
work();
return 0;
}
点个赞吧,谢谢对本博客的支持,进入博客可以看系列

京公网安备 11010502036488号