Cod sursa(job #3302154)

Utilizator Mocanu_Tudor_CristianMocanu Tudor Cristian Mocanu_Tudor_Cristian Data 3 iulie 2025 20:43:47
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <bits/stdc++.h>

#define N 3

using namespace std;

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

int t, x, y, z, a, b, c, n, M[N][N], R[N][N], Q[N][N], MOD = 666013;

void inm(int A[N][N], int B[N][N], int C[N][N])
{
    for(int i = 0; i < N; i++)
        for(int j = 0 ; j < N; j++)
            Q[i][j] = 0;
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            for(int k = 0; k < N; k++)
            {
                C[i][j] += (1LL * A[i][k] * B[k][j]) % MOD;
            }
        }
    }
}

int main()
{
    fin >> t;
    for(int p = 1; p <= t; p++)
    {
        fin >> x >> y >> z >> a >> b >> c >> n;
        for(int i = 0; i < N; i++)
            for(int j = 0; j < N; j++)
            {
                M[i][j] = 0;
                R[i][j] = 0;
            }
        M[0][0] = a;
        M[0][1] = 1;
        M[1][0] = b;
        M[1][2] = 1;
        M[2][0] = c;
        R[0][0] = 1;
        R[1][1] = 1;
        R[2][2] = 1;
        n -= 2;
        while(n > 1)
        {
            if(n % 2 == 0)
            {
                inm(M, M, Q);
                for(int i = 0; i < N; i++)
                    for(int j = 0; j < N; j++)
                        M[i][j] = Q[i][j];
                n /= 2;
            }
            else
            {
                inm(R, M, Q);
                for(int i = 0; i < N; i++)
                    for(int j = 0; j < N; j++)
                        R[i][j] = Q[i][j];
                n--;
            }
        }
        inm(R, M, Q);
        fout << (1LL * z * Q[0][0] + 1LL * y * Q[1][0] + 1LL * x * Q[2][0]) % MOD << '\n';
    }

    return 0;
}