Cod sursa(job #2219614)

Utilizator dfettiDaniel Fetti dfetti Data 9 iulie 2018 13:49:31
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 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;
 
        memset(ans, 0, sizeof(ans));
        memset(aux, 0, sizeof(aux));
        aux[0][0] = aux[1][1] = aux[2][2] = 1;
 
        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;
 
        Putere( N - 2 );
 
        ans[0][0] = Z, ans[0][1] = Y, ans[0][2] = X;
 
        Inmultire(ans, aux);
 
        fout << ans[0][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] += ( 1LL * 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);
};