Cod sursa(job #2636996)

Utilizator pregoliStana Andrei pregoli Data 20 iulie 2020 21:19:23
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>
#define newline '\n'
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
///**********************
const int MOD = 666013;
int n, x, y, z, a, b, c;
int ratiomat[4][4];

void multMat(int a[][4], int b[][4]) {
    int r[4][4] = {};
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            for (int k = 0; k < 3; k++)
                r[i][j] = (1LL * r[i][j] + a[i][k] * b[k][j]) % MOD;
    for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) a[i][j] = r[i][j];
}

void powLog(int p) {
    int r[4][4] = {
        {1},
        {0, 1},
        {0, 0, 1}
    };
    while (p) {
        if (p & 1)
            multMat(r, ratiomat);
        multMat(ratiomat, ratiomat);
        p >>= 1;
    }
    for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) ratiomat[i][j] = r[i][j];
}

void solve() {
    for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) ratiomat[i][j] = 0;
    ratiomat[1][0] = ratiomat[2][1] = 1;
    fin >> x >> y >> z >> a >> b >> c >> n;
    int inimat[4][4] = {{x, y, z}};
    ratiomat[0][2] = c;
    ratiomat[1][2] = b;
    ratiomat[2][2] = a;
    powLog(n - 2);
    multMat(inimat, ratiomat);
    fout << inimat[0][2] << newline;
}

int main() {
    int q;
    for (fin >> q; q--;)
        solve();//*/
    fout.close();
    return 0;
}