Cod sursa(job #3322887)

Utilizator parrot279Sofi Tudose parrot279 Data 16 noiembrie 2025 09:18:28
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const int mod = 666013;
void ridicamat(int a[3][3], int p, int nr);
void inmultiremat(int a[3][3], int b[3][3], int nr);

int main()
{
    int teste;
    fin>>teste;
    while(teste--)
    {
        int x, y, z, a, b, c, n;
        fin>>x>>y>>z>>a>>b>>c>>n;

        int mat[3][3] = {{0,0, c}, {1, 0, b}, {0, 1, a}}, start[3][3];
        start[0][0] = x; start[0][1] = y; start[0][2] = z;
        ridicamat(mat, n-2, 3);
        inmultiremat(start, mat, 3);
        fout<<start[0][2]<<"\n";
    }


    return 0;
}

void ridicamat(int a[3][3], int p, int nr)
{
    int rez[3][3] = {0};
    for(int i = 0; i < nr; ++i)
        rez[i][i] = 1;

    while(p > 0)
    {
        if(p % 2 == 1)
            inmultiremat(rez, a, nr);
        inmultiremat(a, a, nr);
        p /= 2;
    }

    for(int i = 0; i < nr; ++i)
    {
        for(int j = 0; j < nr; ++j)
            a[i][j] = rez[i][j];
    }
}

void inmultiremat(int a[3][3], int b[3][3], int nr)
{
    int aux[3][3] = {0};

    for(int i = 0; i < nr; ++i)
    {
        for(int j = 0; j < nr; ++j)
        {
            for(int k = 0; k < nr; ++k)
            {
                aux[i][j] = 1LL * (aux[i][j] + 1LL * a[i][k] * b[k][j]) % mod;
            }
            aux[i][j] %= mod;
        }
    }

    for(int i = 0; i < nr; ++i)
    {
        for(int j = 0; j < nr; ++j)
            a[i][j] = aux[i][j];
    }


}