Cod sursa(job #1925727)

Utilizator fetti_danutzdezactivat fetti_danutz Data 13 martie 2017 17:07:50
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <cstring>
using namespace std;

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

const int mod = 666013;

void Inmultire(int a[3][3], int b[3][3]);
void Putere(int k);

int T, A, B, C, X, Y, Z;
long long int N;
int ans[3][3], I[3][3], c[3][3], aux[3][3];


int main()
{
    fin >> T;
    while( T-- )
    {
        fin >> X >> Y >> Z >> A >> B >> C >> N;

        I[0][0] = A, I[0][1] = 1, I[0][2] = 0;
        I[1][0] = B, I[1][1] = 0, I[1][2] = 1;
        I[2][0] = C, I[2][1] = 0, I[2][2] = 0;
        memcpy(aux, I, sizeof(I));
        Putere( N - 3 );
        ans[0][0] = Z, ans[0][1] = 0, ans[0][2] = 0;
        ans[1][0] = 0, ans[1][1] = Y, ans[1][2] = 0;
        ans[2][0] = 0, ans[2][1] = 0, ans[2][2] = X;
        Inmultire(ans, aux);

        fout << ans[0][0] + ans[1][0] + ans[2][0] << '\n';


    }

    return 0;
}

void Inmultire(int a[3][3], int b[3][3])
{
    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] += (a[i][k] * b[k][j]) % mod;
                c[i][j] = c[i][j] % mod;
            }
        }
    memcpy(a, c, sizeof(c));
};

void Putere(int k)
{
    if ( !k )   return;
    if ( k % 2 )
        Inmultire(aux, I);
    Inmultire(I, I);
    Putere(k / 2);
};