Cod sursa(job #1295074)

Utilizator RaduVisanRadu Visan RaduVisan Data 18 decembrie 2014 19:19:05
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
using namespace std;

const int MOD = 666013;

int T, X, Y, Z, A, B, C, N, Mat[3][3], Aux[3][3];

void Mult(int A[3][3], int B[3][3])
{
    int C[3][3];
    for(int i = 0; i < 3; ++ i)
        for(int j = 0; j < 3; ++ j)
        {
            C[i][j] = 0;
            for(int k = 0; k < 3; ++ k)
                C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j]) % MOD;
        }

    for(int i = 0; i < 3; ++ i)
        for(int j = 0; j < 3; ++ j)
            A[i][j] = C[i][j];
}

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

    scanf("%i", &T);
    for(; T; T --)
    {
        scanf("%i %i %i %i %i %i %i", &X, &Y, &Z, &A, &B, &C, &N);

        for(int i = 0; i < 3; ++ i)
            for(int j = 0; j < 3; ++ j)
                Mat[i][j] = Aux[i][j] = 0;

        Mat[0][0] = X, Mat[0][1] = Y, Mat[0][2] = Z;
        Aux[1][0] = 1, Aux[2][1] = 1, Aux[0][2] = C, Aux[1][2] = B, Aux[2][2] = A;
        N -= 2;

        while(N)
        {
            if(N & 1) Mult(Mat, Aux);
            Mult(Aux, Aux);
            N /= 2;
        }

        printf("%i\n", Mat[0][2]);
    }
}