Mai intai trebuie sa te autentifici.
Cod sursa(job #1520488)
Utilizator | 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;
}