Cod sursa(job #587190)

Utilizator Smaug-Andrei C. Smaug- Data 4 mai 2011 00:40:55
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
#include<string>

#define MOD 666013

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

int T,ii,a,b,c,V[4],n,P[4][4],S[4][4],C[4][4],i,j,k,Rez;

void inmultire ( int A[4][4] , int B[4][4] ){
	
	memset(C,0,sizeof(C));
	
	for ( i = 1 ; i <= 3 ; ++i ){
		for ( j = 1 ; j <= 3 ; ++j ){
			for ( k = 1 ; k <= 3 ; ++k ){
				C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j] ) % MOD;
			}
		}
	}
	
	memcpy(A,C,sizeof(C));
	
}

inline int solve ( int n ){
	
	memset(P,0,sizeof(P));
	
	P[1][1] = a; P[2][1] = b; P[3][1] = c; P[1][2] = P[2][3] = 1;   
	
	int p = n - 2,Nr = 0;
	
	while ( p ){
		if ( p & 1 ){
			if ( !Nr ){
				memcpy(S,P,sizeof(P));
				++Nr;
			}
			else{
				inmultire(S,P);
			}
		}
		
		inmultire(P,P);
		
		p = p >> 1;
	}
	
	for ( Rez = 0 , i = 1 ; i <= 3 ; ++i ){
		Rez = (Rez + 1LL*V[i] * S[i][1]) % MOD;
	}
	
	return Rez;
	
}

int main () {
	
	fscanf(f,"%d",&T);
	
	for ( ii = 1 ; ii <= T ; ++ii ){
		fscanf(f,"%d %d %d %d %d %d %d",&V[3],&V[2],&V[1],&a,&b,&c,&n);
		fprintf(g,"%d\n",solve(n));
	}
	
	fclose(f);
	fclose(g);
	
	return 0;
}