Untitled
unknown
c_cpp
a year ago
1.6 kB
7
Indexable
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 2 , MOD = 998244353;
typedef long long ll ;
typedef vector<long long> row ;
typedef vector<row> matrix ;
#define sz(x) (int)x.size()
matrix zero(int n , int m)
{
return matrix( n , row(m , 0) );
}
matrix iden(int n)
{
matrix ret = zero(n,n);
for(int i = 0; i < n; i++) ret[i][i] = 1;
return ret;
}
matrix mul(const matrix & a , const matrix & b)
{
matrix ret = zero( sz(a) , sz(b[0]) );
for (int i = 0; i < sz(a); ++i) {
for (int j = 0; j < sz(b[0]); ++j) {
for (int k = 0; k < sz(a[0]); ++k) {
ret[i][j] += a[i][k] * b[k][j] % MOD;
ret[i][j] %= MOD ;
}
}
}
return ret ;
}
matrix pow(const matrix & a , ll k)
{
if(k == 0 ) return iden(sz(a)) ;
if(k % 2 ) return mul( a , pow(a , k-1) ) ;
return pow( mul(a,a) , k/2) ;
}
pair<ll ,ll > sol(int n , ll k)
{
matrix base = {{0,1},
{0,0}};
matrix trans = {{n-2, 0},
{1, -2}};
matrix a = mul( base , pow(trans, k) ) ;
return {a[0][0] , a[0][1]};
}
int32_t main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n ;
ll k ;
cin >> n >> k;
vector<ll> a(n);
ll sum =0 ;
for (int i = 0; i < n; ++i) {
cin >> a[i] ;
a[i] %= MOD;
sum += a[i] ;
sum %= MOD ;
}
pair<ll ,ll > xy = sol(n, k);
for (int i = 0; i < n; ++i) {
cout << ((((xy.first * sum % MOD) + (xy.second * a[i] % MOD))% MOD) + MOD)%MOD << "\n" ;
}
}Editor is loading...
Leave a Comment