题解:P14514 [NFLSPC #8] 如何区分北京东路和北京东路
yanmingqian · · 题解
设总威力为
设第
- 发生在
i 。则i 威力清零,贡献为 0。 - 发生在
j (j\neq i )。则i 的威力增加\frac{E_j(k-1)}{n-1} 。
结合
之后可以矩阵加速,或者推出通项公式:
预处理一下之后可以做到
#include<iostream>
using namespace std;
#define int long long
const int N=1e6+10,mod=998244353;
int qpow(int a,int b){
int ans=1;
while(b){
if(b&1) ans=ans*a%mod;
a=a*a%mod;b>>=1;
}
return ans;
}
int a[N];
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int n,k,sum=0;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i],sum=(sum+a[i])%mod;
int x=sum*qpow(n,mod-2)%mod,y=qpow((n-2)*qpow(n-1,mod-2)%mod,k);
for(int i=1;i<=n;i++) cout<<(x+(((a[i]-x)%mod+mod)%mod)*y%mod)%mod<<" ";
return 0;
}