Cod sursa(job #2702243)

Utilizator vlad2009Vlad Tutunaru vlad2009 Data 3 februarie 2021 13:12:07
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <bits/stdc++.h>

using namespace std;

int sol[102];
const int MOD = 666013;
long long mat[4][4], rez[4][4];
int x, y, z, a, b, c, n, t;

void inmultire (long long a[4][4], long long b[4][4])
{
    long long aux[4][4];
    for (int i = 1; i <= 3; i++)
    {
        for (int j = 1; j <= 3; j++)
        {
            aux[i][j] = 0;
        }
    }
    for (int i = 1; i <= 3; i++)
    {
        for (int j = 1; j <= 3; j++)
        {
            for (int k = 1; k <= 3; k++)
            {
                aux[i][j] = 1LL * (aux[i][j] + a[i][k] * b[k][j] % MOD) % MOD;
            }
        }
    }
    for (int i = 1; i <= 3; i++)
    {
        for (int j = 1; j <= 3; j++)
        {
            a[i][j] = aux[i][j];
        }
    }
}

void put (int k)
{
    while (k)
    {
        if (k & 1)
        {
            inmultire(rez, mat);
        }
        inmultire(mat, mat);
        k >>= 1;
    }
}

int main()
{
    ifstream fin ("iepuri.in");
    ofstream fout ("iepuri.out");
    fin >> t;
    for (int T = 1; T <= t; T++) {
        fin >> x >> y >> z >> a >> b >> c >> n;
        mat[1][1] = mat[1][2] = mat[2][2] =  mat[3][1] = 0;
        mat[2][1] = mat[3][2] = 1;
        mat[1][3] = c;
        mat[2][3] = b;
        mat[3][3] = a;
        for (int i = 1; i <= 3; i++)
        {
            for (int j = 1; j <= 3; j++)
            {
                rez[i][j] = mat[i][j];
            }
        }
        put(n - 3);
        fout << 1LL * (1LL * rez[1][3] * x + 1LL * rez[2][3] * y + 1LL * rez[3][3] * z) % MOD << "\n";
    }

    return 0;
}