Cod sursa(job #997981)

Utilizator poptibiPop Tiberiu poptibi Data 15 septembrie 2013 13:16:22
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include <cstdlib>
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], i, j, k;
    for(int i = 0; i < 3; ++ i)
        for(int j = 0; j < 3; ++ j)
        {
            long long Now = 0;
            for(int k = 0; k < 3; ++ k)
                Now += 1LL * A[i][k] * B[k][j];
            C[i][j] = Now % 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] = Aux[2][1] = 1;
        Aux[0][2] = C, Aux[1][2] = B, Aux[2][2] = A;

        N -= 2;
        while(N)
        {
            if(N % 2) Mult(Mat, Aux);
            Mult(Aux, Aux);
            N /= 2;
        }

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

    return 0;
}