Cod sursa(job #3295465)

Utilizator ancamaximMaxim Anca Stefania ancamaxim Data 5 mai 2025 21:41:58
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

#define ull unsigned long long
#define ll long long
#define KMAX 3
#define MOD 666013

void multiply_matrix(ll A[KMAX][KMAX], ll B[KMAX][KMAX], ll C[KMAX][KMAX]) {
    ll tmp[KMAX][KMAX];

    for (int i = 0; i < KMAX; ++i)
        for (int j = 0; j < KMAX; ++j) {
            ull sum = 0;

            for (int k = 0; k < KMAX; ++k)
                sum = (sum + 1LL * A[i][k] * B[k][j]) % MOD;
            tmp[i][j] = sum;
        }
    memcpy(C, tmp, sizeof(tmp));
}

void power_matrix(ll C[KMAX][KMAX], int p, ll R[KMAX][KMAX]) {
    ll tmp[KMAX][KMAX];

    for (int i = 0; i < KMAX; ++i)
        for (int j = 0; j < KMAX; ++j)
            tmp[i][j] = (i == j);
    
    while (p != 1) {
        if (p % 2 == 0) {
            multiply_matrix(C, C, C);
            p /= 2;
        } else {
            multiply_matrix(tmp, C, tmp);
            --p;
        }
    }
    multiply_matrix(C, tmp, R);
}

int main() {
    int t, x, y, z, a, b, c, n;

    fin >> t;
    for (int i = 0; i < t; ++i) {
        fin >> x >> y >> z >> a >> b >> c >> n;
    
        ll C[KMAX][KMAX] = {{0, 0, c}, {1, 0, b}, {0, 1, a}};

        power_matrix(C, n - 2, C);
        ull sol = (x * C[0][2] + y * C[1][2] + z * C[2][2]) % MOD;
        
        fout << sol << "\n";
    }

    return 0;
}