Cod sursa(job #2107413)

Utilizator inquisitorAnders inquisitor Data 17 ianuarie 2018 09:56:51
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;

int T, X, Y, Z, A, B, C, N, M = 666013;

struct Matrix
{
    int a[3][3];

    void operator *= (Matrix &b)
    {
        int r[3][3]{};

        for(int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                for(int k = 0; k < 3; k++)
                {
                    r[i][j] = (r[i][j] + 1LL * a[i][k] * b.a[k][j] % M) % M;
                }
            }
        }

        memcpy(a, r, 36);
    }

    void operator ^= (int p)
    {
        Matrix r = {1, 0, 0,
                    0, 1, 0,
                    0, 0, 1};

        while(p)
        {
            if(p & 1) r *= *this;

            *this *= *this; p >>= 1;
        }

        *this = r;
    }
};

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

    scanf("%d", &T);

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

        Matrix S = {X, Y, Z}, M1 = {0, 0, C,
                                    1, 0, B,
                                    0, 1, A};
        M1 ^= N; S *= M1;

        printf("%d\n", S.a[0][0]);
    }

    return 0;
}