Cod sursa(job #3200348)

Utilizator tibi.chirilaTibi Chirila tibi.chirila Data 4 februarie 2024 13:32:33
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int Sol[3][3], M[3][3];

const int MOD = 666013;

void Multiply (int A[3][3], int B[3][3])
{
    long long C[3][3];

    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
        {
C[i][j] = 0;
for (int k = 0; k < 3; k++)
            {

                C[i][j] += 1LL*A[i][k]*B[k][j];
            }
            C[i][j] %= MOD;
        }


    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            A[i][j] = C[i][j];

}

int main()
{

    // + problema cover1 de pe campion

    int t;
    fin >> t;
    while(t--)
    {
        int x, y, z, a, b, c, n;
        fin >> x >> y >> z >> a >> b >> c >> n;
        Sol[0][0] = x;
        Sol[0][1] = y;
        Sol[0][2] = z;
        M[0][0] = 0;
        M[0][1] = 0;
        M[0][2] = c;
        M[1][0] = 1;
        M[1][1] = 0;
        M[1][2] = b;
        M[2][0] = 0;
        M[2][1] = 1;
        M[2][2] = a;
        int k = n;
        while (k)
        {
        if (k % 2 == 1)
            Multiply(Sol, M);
        Multiply(M,M);
        k = k / 2;
        }
        fout <<  Sol[0][0]  << '\n';
    }

    return 0;
}