Untitled
unknown
c_cpp
a year ago
2.9 kB
8
Indexable
#include <bits/stdc++.h>
#define ll long long
#define stp(n) fixed<<setprecision(n)
#define flash cin.tie(0); cin.sync_with_stdio(0);
#define el '\n'
# define pll pair<ll,ll>
# define pi pair<int,int>
#define popCnt(x) (__builtin_popcountll(x))
#define LSB(x) (__builtin_ffsll(x) - 1)
#define MSB(x) (64 - __builtin_clzll(x) - 1).
using namespace std;
//#pragma GCC optimize("03")
//#pragma GCC target("tune=native")
//#pragma GCC optimize("unroll-loops")
const ll mod = 998244353;
ll mul(const ll &a, const ll &b) {
return (a % mod + mod) * (b % mod + mod) % mod;
}
ll add(const ll &a, const ll &b) {
return (a + b + 2 * mod) % mod;
}
const int N = 1e2, inf = 2e9;
const ll infl = 2e18;
typedef vector<vector<ll>> Matrix;
Matrix operator*(Matrix matrix1, Matrix matrix2) {
int m1 = matrix1.size();
int n1 = matrix1[0].size();
int n2 = matrix2[0].size();
Matrix result(m1, vector<ll>(n2, 0));
for (int i = 0; i < m1; ++i) {
for (int j = 0; j < n2; ++j) {
for (int k = 0; k < n1; ++k) {
result[i][j] = add(result[i][j], mul(matrix1[i][k], matrix2[k][j]));
// result[i][j] %= mod;
}
}
}
return result;
}
Matrix binPow(Matrix a, long long b) {
int n = a.size();
Matrix res(n, vector<ll>(n, 0));
for (int i = 0; i < n; ++i) {
res[i][i] = 1;
}
while (b > 0) {
if (b & 1)
res = res * a;
a = a * a;
b >>= 1;
}
return res;
}
void testCase() {
//5 0 1 0 7 6 2
// 4 3 7 4 6 8
ll n, k;
cin >> n >> k;
ll a[n], sum = 0;
for (ll &i: a) {
cin >> i;
sum += i;
}
for (int i = 0; i < n; ++i) {
Matrix init = {{a[i], sum}}, transition = {{-2, 0},
{1, n - 2}}, overallMalt;
overallMalt = init * binPow(transition, k);
cout << overallMalt[0][0] << el;
}
// ll a[N];
// ll c = 3, all = 1;
// for (int i = 0; i < N; i++)a[i] = c;
// for (int i = 1; i < N; i += 100)a[i] = 0;
//
// ll lst;
// for (int i = 0; i < 100; ++i) {
// lst = all;
// all = 0;
// for (int j = 0; j < N; ++j) all += a[j];
//// cout << all << endl;
// ll mx = 0;
// for (int j = 0; j < N; ++j) {
// a[j] = all - a[j] - a[j];
// mx = max(mx, a[j]);
// }
// cout << all / lst << endl;
//// cout << i << " " << mx << el;
// }
}
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
flash;
int T = 1;
// cin >> T;
while (T--) {
// cout<<"slkfjd";
testCase();
// cout << el;
// cout << endl;
}
}Editor is loading...
Leave a Comment