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