Untitled
unknown
c_cpp
a year ago
1.6 kB
4
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