Cod sursa(job #2153477)

Utilizator anisca22Ana Baltaretu anisca22 Data 6 martie 2018 11:26:03
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <bits/stdc++.h>
#define MOD 666013

using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

int T, A, B, C, X, Y, Z, N;
int act[3][3], rsp[3][3], ORI[3][3];

void getMatrix()
{
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
        {
            act[i][j] = rsp[i][j];
            rsp[i][j] = 0;
        }
}

void recurenta(int putere)
{
    if (putere <= 1)
    {
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                rsp[i][j] = ORI[i][j];
        return;
    }
    if (putere % 2 == 0)
    {
        recurenta(putere / 2);
        getMatrix();
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                for (int k = 0; k < 3; k++)
                    rsp[i][j] = (rsp[i][j] + (act[i][k] * act[k][j]) % MOD) % MOD;
        return;
    }
    recurenta(putere - 1);
    getMatrix();
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            for (int k = 0; k < 3; k++)
                rsp[i][j] = (rsp[i][j] + (act[i][k] * ORI[k][j]) % MOD) % MOD;
}


int main()
{
    fin >> T;
    while (T--)
    {
        fin >> X >> Y >> Z >> A >> B >> C >> N;
        int original[3][3] = {{0, 0, C},{1, 0, B},{0, 1, A}};
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                ORI[i][j] = original[i][j];
        recurenta(N - 2);
        int D3[3] = {X, Y, Z};
        int DX[3] = {0, 0, 0};
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                    DX[i] = (DX[i] + (D3[j] * rsp[j][i]) % MOD) % MOD;
        fout << DX[2] << "\n";
    }
    return 0;
}