Cod sursa(job #3261480)

Utilizator stefbStefan Baicoianu stefb Data 6 decembrie 2024 11:52:56
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.06 kb
#include <fstream>
using namespace std;

const int MOD = 666013;

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

void produs(int p[3][3], int a[3][3])
{
    int aux[3][3];
    aux[0][0] = ((long long)p[0][0] * a[0][0] + (long long)p[0][1] * a[1][0] + (long long)p[0][2] * a[2][0]) % MOD;
    aux[0][1] = ((long long)p[0][0] * a[0][1] + (long long)p[0][1] * a[1][1] + (long long)p[0][2] * a[2][1]) % MOD;
    aux[0][2] = ((long long)p[0][0] * a[0][2] + (long long)p[0][1] * a[1][2] + (long long)p[0][2] * a[2][2]) % MOD;

    aux[1][0] = ((long long)p[1][0] * a[0][0] + (long long)p[1][1] * a[1][0] + (long long)p[1][2] * a[2][0]) % MOD;
    aux[1][1] = ((long long)p[1][0] * a[0][1] + (long long)p[1][1] * a[1][1] + (long long)p[1][2] * a[2][1]) % MOD;
    aux[1][2] = ((long long)p[1][0] * a[0][2] + (long long)p[1][1] * a[1][2] + (long long)p[1][2] * a[2][2]) % MOD;

    aux[2][0] = ((long long)p[2][0] * a[0][0] + (long long)p[2][1] * a[1][0] + (long long)p[2][2] * a[2][0]) % MOD;
    aux[2][1] = ((long long)p[2][0] * a[0][1] + (long long)p[2][1] * a[1][1] + (long long)p[2][2] * a[2][1]) % MOD;
    aux[2][2] = ((long long)p[2][0] * a[0][2] + (long long)p[2][1] * a[1][2] + (long long)p[2][2] * a[2][2]) % MOD;

    p[0][0] = aux[0][0];
    p[0][1] = aux[0][1];
    p[0][2] = aux[0][2];

    p[1][0] = aux[1][0];
    p[1][1] = aux[1][1];
    p[1][2] = aux[1][2];

    p[2][0] = aux[2][0];
    p[2][1] = aux[2][1];
    p[2][2] = aux[2][2];
}

void putere(int p[3][3], int a[3][3], int n)
{
    p[0][0] = p[1][1] = p[2][2] = 1;
    p[0][1] = p[0][2] = 0;
    p[1][0] = p[1][2] = 0;
    p[2][0] = p[2][1] = 0;
    while(n != 0)
    {
        int cifb = n % 2;
        if(cifb != 0)
        {
            produs(p, a);
        }
        produs(a, a);
        n /= 2;
    }
}

int main()
{
    int t, x, y, z, a, b, c, n;
    fin >> t;
    for(int i = 0; i < t; i++)
    {
        fin >> x >> y >> z >> a >> b >> c >> n;
        int p[3][3], m[3][3] = {{0, 1, 0}, {0, 0, 1}, {c, b, a}};
        putere(p, m, n);
        fout << p[0][0] * x + p[0][1] * y + p[0][2] * z << "\n";
    }
    return 0;
}