Untitled

 avatar
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