Cod sursa(job #2701845)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 1 februarie 2021 22:43:50
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <bits/stdc++.h>

using namespace std;

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

constexpr int MOD = 666013;

int main()
{
    int T = 1;

    f >> T;

    for (; T; -- T ) {
        int A, B, C, X, Y, Z, N;

        f >> X >> Y >> Z >> A >> B >> C >> N;

        int n[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
        int a[3][3] = {{0, 0, C}, {1, 0, B}, {0, 1, A}};

        while (N) {
            if (N % 2 == 0) {
                int aux[3][3] = {{0, 0, 0},
                                 {0, 0, 0},
                                 {0, 0, 0}};

                for (int i = 0; i < 3; ++ i )
                    for (int j = 0; j < 3; ++ j )
                        for (int k = 0; k < 3; ++ k )
                            aux[i][j] = (aux[i][j] + (1LL * a[i][k] * a[k][j]) % MOD) % MOD;

                for (int i = 0; i < 3; ++ i )
                    for (int j = 0; j < 3; ++ j )
                        a[i][j] = aux[i][j];

                N /= 2;
            }
            else {

                int aux[3][3] = {{0, 0, 0},
                                 {0, 0, 0},
                                 {0, 0, 0}};

                for (int i = 0; i < 3; ++ i )
                    for (int j = 0; j < 3; ++ j )
                        for (int k = 0; k < 3; ++ k )
                            aux[i][j] = (aux[i][j] + (1LL * a[i][k] * n[k][j]) % MOD) % MOD;

                for (int i = 0; i < 3; ++ i )
                    for (int j = 0; j < 3; ++ j )
                        n[i][j] = aux[i][j];

                -- N;
            }
        }

        int aux[1][3] = {X, Y, Z};
        int ans[1][3] = {0, 0, 0};
        for (int i = 0; i < 1; ++ i )
            for (int j = 0; j < 3; ++ j )
                for (int k = 0; k < 3; ++ k )
                    ans[i][j] = (ans[i][j] + (1LL * aux[i][k] * n[k][j]) % MOD) % MOD;

        g << ans[0][0] << '\n';
    }
    return 0;
}