Cod sursa(job #3350041)

Utilizator Emilia23Dobra Emilia Emilia23 Data 4 aprilie 2026 23:18:35
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>
#define MOD 666013

using namespace std;

ifstream f("iepuri.in");
ofstream g("iepuri.out");

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

void pow_sol(int a[3][3], int p) {
    int sol[3][3] = {
        {1, 0, 0},
        {0, 1, 0},
        {0, 0, 1}
    };
    while (p) {
        if (p % 2) {
            mat_prod(sol, a);
        }
        mat_prod(a, a);
        p /= 2;
    }
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            a[i][j] = sol[i][j];
        }
    }
}

int main() {
    int t, x, y, z, a, b, c, n;
    f >> t;
    while (t--) {
        f >> x >> y >> z >> a >> b >> c >> n;
        int m[3][3] = {
            {a, b, c},
            {1, 0, 0},
            {0, 1, 0}
        };
        pow_sol(m, n - 2);
        int sol = ((1LL * m[0][0] * z) % MOD + (1LL * m[0][1] * y) % MOD + (1LL * m[0][2] * x) %MOD) % MOD;
        g << sol <<'\n';
    }
    return 0;
}