Cod sursa(job #2019363)

Utilizator dragomirmanuelDragomir Manuel dragomirmanuel Data 7 septembrie 2017 16:49:12
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <cstdio>

using namespace std;

int t,x,y,z,a,b,c,n;
const int mod = 666013;

void Prod_Mat(int a[3][3], int b[3][3], int c[3][3])
{
    int a1[3][3], b1[3][3];

    for(int i=0; i<3; ++i)
        for(int j=0; j<3; ++j)
        {
            a1[i][j] = a[i][j];
            b1[i][j] = b[i][j];
        }

    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] = (c[i][j] + (1LL *a1[i][k]*b1[k][j])%mod) %mod;
            }
        }
    }
}

void Solve()
{
    int rez[3][3] = {{x,y,z},{0,0,0},{0,0,0}};
    int mat[3][3] = {{0,0,c},{1,0,b},{0,1,a}};

    do
    {
        if(n%2)
        {
            Prod_Mat(rez,mat,rez);
        }

        Prod_Mat(mat,mat,mat);

        n/=2;

    }
    while(n);

    cout << rez[0][2] << "\n";
}

void Read()
{
    scanf("%d", &t);

    for(int i=1; i<=t; ++i)
    {
        scanf("%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &n);
        n=n-2;
        Solve();
    }
}

int main()
{
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    Read();

    return 0;
}