Cod sursa(job #2672287)

Utilizator chriss_b_001Cristian Benghe chriss_b_001 Data 13 noiembrie 2020 16:35:21
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>

using namespace std;

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

const int MOD = 666013;

int M[3][3], a[3][3], MAT[3][3] = {{0, 0, 0}, {1, 0, 0}, {0, 1, 0}};
int X, Y, Z, A, B, C, N;

void multMat(int A[][3], int B[][3])
{
    static int C[3][3];
    int i, j, q;
    for(i = 0; i < 3; ++i)
        for(int j = 0; j < 3; ++j)
        {
            C[i][j] = 0;
            for(q = 0; q < 3; ++q)
            {
                C[i][j] += A[i][q] * B[q][j] % MOD;
                C[i][j] %= MOD;
            }
        }
    memcpy(A, C, sizeof(C));
}

void init_I3()
{
    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3; j++)
            if(i == j)
                a[i][j] = 1;
            else a[i][j] = 0;
}

void init()
{
    init_I3();

    memcpy(M,MAT,sizeof(MAT));
    M[0][2] = C;
    M[1][2] = B;
    M[2][2] = A;
}

void powlg(int p)
{
    while(p > 0)
    {
        if(p & 1)multMat(a, M);
        multMat(M, M);
        p >>= 1;
    }
}

void solve()
{
    f >> X >> Y >> Z >> A >> B >> C >> N;
    init();
    powlg(N - 2);
    g << X * a[0][2] + Y * a[1][2] + Z * a[2][2] << '\n';
}

int main()
{
    int T;
    f >> T;
    while(T--)
        solve();
    return 0;
}