Cod sursa(job #2809054)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 25 noiembrie 2021 21:11:32
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>

using namespace std;

const int MOD = 666013;
int f[3][3], a[3][3];

void produs(int p[3][3], int x[3][3], int y[3][3]) {
    int aux[3][3];
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++) {
            aux[i][j] = 0;
            for (int k = 0; k < 3; k++)
                aux[i][j] = ((long long)aux[i][j] + (long long)x[i][k] * y[k][j]) % MOD;
        }
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            p[i][j] = aux[i][j];
}

void lgput(int n) {
    while (n != 0) {
        if (n % 2 != 0)
            produs(f, f, a);
        produs(a, a, a);
        n /= 2;
    }
}

int main() {

    freopen ("iepuri.in", "r", stdin);
    freopen ("iepuri.out", "w", stdout);

    int n, X, Y, Z, A, B, C, teste;

    scanf ("%d", &teste);
    for (int t = 1; t <= teste; t++) {
        scanf ("%d%d%d%d%d%d%d", &X, &Y, &Z, &A, &B, &C, &n);
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                a[i][j] = f[i][j] = 0;
        f[0][0] = f[1][1] = f[2][2] = 1; ///f e initial I3
        a[0][2] = C;
        a[1][2] = B;
        a[2][2] = A;
        a[1][0] = a[2][1] = 1;

        lgput(n - 2);

        int val = ((long long)f[0][2] * X + (long long)f[1][2] * Y + (long long)f[2][2] * Z) % MOD;
        printf ("%d\n", val);

    }


    return 0;
}