Cod sursa(job #2742726)

Utilizator dumitrescu_andreiDumitrescu Andrei dumitrescu_andrei Data 21 aprilie 2021 16:50:39
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
#define MOD 666013

using namespace std;

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

void multiply(vector<vector<long long>> &A, vector<vector<long long>> B) {
    vector<vector<long long>> temp (A.size(), vector<long long>(A[0].size(), 0));
    long long N = A.size();

    for (long long i = 0; i < N; ++i) {
        for (long long j = 0; j < N; ++j) {
            for (long long k = 0; k < N; ++k) {
                temp[i][j] += (A[i][k] * B[k][j]) % MOD;
            }
        }
    }

    A = temp;
}

int main() {
    long long T, X, Y, Z, A, B, C, N;

    f >> T;

    while (T) {
        T--;
        f >> X >> Y >> Z >> A >> B >> C >> N;

        vector<vector<long long>> matrix = {{0, 1, 0}, {0, 0, 1}, {C, B, A}};
        vector<vector<long long>> matrixAns = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};

        N -= 2;

        while (N) {
            if (N % 2) {
                N--;
                multiply(matrixAns, matrix);
            }

            N /= 2;
            multiply(matrix, matrix);
        }

        g << (matrixAns[2][0] * X % MOD + matrixAns[2][1] * Y % MOD + matrixAns[2][2] * Z % MOD) % MOD << '\n';
    }

    f.close();
    g.close();

    return 0;
}