Cod sursa(job #3256108)

Utilizator AndreiNicolaescuEric Paturan AndreiNicolaescu Data 13 noiembrie 2024 15:08:41
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>

using namespace std;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
const int MOD = 666013;
int q, x, y, z, A, B, C, a[3][3], M[3][3], n;
void inmulmat(int a[3][3], int b[3][3])
{
    int aux[3][3] = {};
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
            for(int k=0; k<3; k++)
                aux[i][j] = (aux[i][j] + (1LL * a[i][k] * b[k][j]) % MOD) % MOD;
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
            a[i][j] = aux[i][j];
}
void fastpow(int p)
{
    while(p)
    {
        if(p % 2)
            inmulmat(M, a);
        inmulmat(a , a);
        p /= 2;
    }
}
int main()
{
    cin >> q;
    while(q--)
    {
        cin >> x >> y >> z >> A >> B >> C >> n;
        a[0][2] = C;
        a[1][0] = a[2][1] = 1;
        a[1][2] = B;
        a[2][2] = A;
        a[0][0] = a[0][1] = a[1][1] = a[2][0] = 0;

        M[1][0] = M[1][1] = M[1][2] = M[2][0] = M[2][1] = M[2][2] = 0;
        M[0][0] = x;
        M[0][1] = y;
        M[0][2] = z;
        fastpow(n-2);

        cout << M[0][2] << '\n';
    }
    return 0;
}