Cod sursa(job #2828186)

Utilizator pielevladutPiele Vladut Stefan pielevladut Data 6 ianuarie 2022 22:45:46
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <bits/stdc++.h>

#define int long long

using namespace std;

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

const int MOD = 666013;

int T;
int iepuri[5][5];
int aux[5][5];
int matrix[5][5];

void inmultire(int a[5][5], int b[5][5])
{
    for(int i = 1; i <= 3; i ++)
    {
        for(int j = 1; j <= 3; j ++)
        {
            int suma = 0;
            for(int q = 1; q <= 3; q ++)
            {
                suma += a[i][q] * b[q][j];
                suma %= MOD;
            }
            matrix[i][j] = suma;
        }
    }
    for(int i = 1; i <= 3; i ++)
    {
        for(int j = 1; j <= 3; j ++)
        {
            a[i][j] = matrix[i][j];
        }
    }
}

void lgput(int exp)
{
    for(int i = 1; i <= exp; i *= 2)
    {
        if(i & exp)
        {
            inmultire(iepuri, aux);
        }
        inmultire(aux, aux);
    }
}

signed main()
{
    fin >> T;
    while(T--)
    {
        int X, Y, Z, A, B, C, N;
        fin >> X >> Y >> Z >> A >> B >> C >> N;
        aux[1][1] = iepuri[1][1] = 0;
        aux[1][2] = iepuri[1][2] = 0;
        aux[1][3] = iepuri[1][3] = C;
        aux[2][1] = iepuri[2][1] = 1;
        aux[2][2] = iepuri[2][2] = 0;
        aux[2][3] = iepuri[2][3] = B;
        aux[3][1] = iepuri[3][1] = 0;
        aux[3][2] = iepuri[3][2] = 1;
        aux[3][3] = iepuri[3][3] = A;
        lgput(N - 3);
        int suma = X * iepuri[1][3] + Y * iepuri[2][3] + Z * iepuri[3][3];
        suma %= MOD;
        fout << suma << '\n';
    }
    return 0;
}