Cod sursa(job #2691406)

Utilizator Bogdan.paun50Mandresi Bogdan Bogdan.paun50 Data 28 decembrie 2020 15:12:28
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <iostream>
#include <fstream>

using namespace std;

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

long long A[5][5], B[5][5], C[5][5], sol;

int a, b, c, x, y, z, n, t;

void prod (long long A[5][5], long long B[5][5], long long C[5][5])
{
    int i, j, k;
    for(int i = 1; i <= 3; i++)
        for(int j = 1; j <= 3; j++)
            C[i][j] = 0;

    for(int i = 1; i <= 3; i++)
    {
        for(int j = 1; j <= 3; j++)
            for(int k = 1; k <= 3; k++)
            {
                C[i][j] += ((A[i][k]) * (B[k][j])) % 666013;
                C[i][j] %= 666013;
            }
    }
}

void eg(long long A[5][5], long long B[5][5])
{
    for(int i = 1; i <= 3; i++)
        for(int j = 1; j <= 3; j++)
            B[i][j] = A[i][j];
}

int main()
{

    fin >> t;
    while(t--)
    {
        fin >> x >> y >> z;
        fin >> a >> b >> c >> n;
        n -= 2;
        for(int i = 1; i <= 3; i++)
        {
            for(int j = 1; j <= 3; j++)
                A[i][j] = 0;
            A[i][i] = 1;
        }
        B[1][1] = a;
        B[1][2] = b;
        B[1][3] = c;
        B[2][1] = B[3][2] = 1;
        B[2][2] = B[2][3] = B[3][1] = B[3][3] = 0;
        while(n > 0)
        {
            if ((n & 1) == 1)
            {
                prod(A, B, C);
                eg(C, A);
            }
            prod(B, B, C);
            eg(C, B);
            n >>= 1;
        }
        sol = ((A[1][1] * z) % 666013 + (A[1][2] * y) % 666013 + (A[1][3] * x) % 666013) % 666013;
        fout << sol << "\n";
    }
    return 0;
}