Cod sursa(job #3313287)

Utilizator bogdan1479Luca Bogdan Alexandru bogdan1479 Data 3 octombrie 2025 10:46:22
Problema Iepuri Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>

using namespace std;

const int MOD = 666013;

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

int t, X, Y, Z, A, B, C, N, mat[4][4], val[4][4], temp[4][4];
long long sol;

void init()
{
    for(int i = 1; i < 4; ++i)
        for(int j = 1; j < 4; ++j)
            val[i][j] = (i == j);
    mat[1][1] = 0, mat[1][2] = 1, mat[1][3] = 0;
    mat[2][1] = 0, mat[2][2] = 0, mat[2][3] = 1;
    mat[3][1] = C, mat[3][2] = B, mat[3][3] = A;
}

void mul(int a[4][4], int b[4][4])
{
    for(int i = 1; i < 4; ++i)
        for(int j = 1; j < 4; ++j)
            temp[i][j] = 0;
    for(int i = 1; i < 4; ++i)
        for(int j = 1; j < 4; ++j)
            for(int k = 1; k < 4; ++k)
                temp[i][j] = (temp[i][j] + 1LL * a[i][k] * b[k][j]) % MOD;
    for(int i = 1; i < 4; ++i)
        for(int j = 1; j < 4; ++j)
            a[i][j] = temp[i][j] % MOD;
}

void exp(int b)
{
    while(b)
    {
        if(b & 1) mul(val, mat);
        mul(mat, mat);
        b >>= 1;
    }
}

int main()
{
    fin >> t;
    while(t--)
    {
        fin >> X >> Y >> Z >> A >> B >> C >> N;
        init();
        exp(N);
        sol = (long long)X * val[1][1] + Y * val[1][2] + Z * val[1][3];
        fout << sol % MOD << "\n";
    }
    return 0;
}