Mai intai trebuie sa te autentifici.

Cod sursa(job #1520488)

Utilizator BLz0rDospra Cristian BLz0r Data 8 noiembrie 2015 20:51:32
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#include <cstring>
using namespace std;

#define Mod 666013

FILE *f = fopen ( "iepuri.in", "r" );
FILE *g = fopen ( "iepuri.out", "w" );

typedef int Matrix[3][3];

void MatMult ( Matrix &A, Matrix &B, Matrix &C ){

    memset ( C, 0, sizeof (C) );

    for ( int i = 0; i < 3; ++i )
        for ( int j = 0; j < 3; ++j )
            for ( int k = 0; k < 3; ++k )
                C[i][j] = ( C[i][j] + 1LL * A[i][k] * B[k][j] ) % Mod;

    memcpy ( A, C, sizeof(C) );
}

int N, X, Y, Z, A, B, C;
Matrix D, Rez, aux;

void PrepareMatrix(){

    Rez[0][0] = X; Rez[0][1] = Y; Rez[0][2] = Z;

    D[0][0] = 0; D[0][1] = 0; D[0][2] = C;
    D[1][0] = 1; D[1][1] = 0; D[1][2] = B;
    D[2][0] = 0; D[2][1] = 1; D[2][2] = A;
}

void LgPow ( int N ){

    while ( N ){
        if ( N & 1 )
            MatMult( Rez, D, aux );
        N >>= 1;
        MatMult( D, D, aux );
    }
}

int main(){

    int T;

    fscanf ( f, "%d", &T );

    while ( T-- ){
        fscanf ( f, "%d%d%d%d%d%d%d", &X, &Y, &Z, &A, &B, &C, &N );

        PrepareMatrix();

        LgPow ( N-2 );
        fprintf ( g, "%d\n", Rez[0][2] );
    }

    return 0;
}