Cod sursa(job #3352235)

Utilizator GarlicBreadStefan Popescu GarlicBread Data 25 aprilie 2026 12:35:50
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>

using namespace std;

long long m_inmultire[3][3];

void inmult_matrice(long long a[3][3], long long b[3][3])
{
    long long rezultat[3][3] = {0};
    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3; j++)
            for(int k = 0; k < 3; k++)
            {
                rezultat[i][j] += a[i][k] * b[k][j];
                rezultat[i][j] = rezultat[i][j] % 666013;
            }

    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3; j++)
            a[i][j] = rezultat[i][j];
}

void exponentiere(long long m[3][3], int p)
{
    long long rez[3][3];
    for(int i = 0; i < 3; i ++)
        for(int j = 0; j < 3; j ++)
        {
            if(i == j) rez[i][j] = 1;
            else rez[i][j] = 0;
        }

    while(p > 0)
    {
        if(p % 2 == 1)
            inmult_matrice(rez, m);
        inmult_matrice(m, m);
        p/=2;
    }

    for(int i = 0 ; i < 3; i ++)
        for(int j = 0; j < 3; j ++)
            m[i][j]=rez[i][j];
}

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

int main()
{
    long long X, Y, Z, A, B, C, T;
    long long N;
    fin >> T;
    for(long long i = 1; i <= T; i ++)
    {
        long long iepuri;
        fin >> X >> Y >> Z >> A >> B >> C >> N;
        long long m_inmultire[3][3] = { {A, B, C}, {1, 0, 0}, {0, 1, 0} };
        exponentiere(m_inmultire, N-2);
        iepuri = (Z*m_inmultire[0][0])%666013 + (Y*m_inmultire[0][1])%666013 + (X*m_inmultire[0][2])%666013;
        iepuri = iepuri % 666013;
        fout << iepuri<< " ";
    }

    return 0;
}