Cod sursa(job #538938)

Utilizator klamathixMihai Calancea klamathix Data 22 februarie 2011 09:35:18
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<cstdio>
#include<cstring>
using namespace std;
const int mod = 666013;
int x , y , z , a , b, c , n;

void init_matrix()
{
	int i , j;
	A[1][1] = a , A[1][2] = b , A[1][3] = c;
	A[2][1] = 1 , A[2][2] = 0 , A[2][3] = 0;
	A[3][1] = 0 , A[3][2] = 1 , A[3][3] = 0;
	
	for( i = 1 ; i < = 3 ; ++i )
			for( j = 1 ; j <= 3 ; ++j ) 	
				A2[i][j] = A[i][j];
}

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

void pow_matrix( int A2[4][4], int n , int mod) {
	
	while ( n ) {
		if ( n & 1 ) mult(A2,A) , n -- ;
		else mult(A2,A2) , n >>=1;
	}	
}
	
int solve()
{
	ll int ans;
	pow_matrix(A2,n,mod);
	ans = ( 1LL * x * A[1][1] ) % mod + (1LL * y * A[1][2] ) % mod + (1LL * z *  A[1][3] ) % mod;
	return ans % mod;
}

int main()
{
	freopen("iepuri.in","r",stdin):
	freopen("iepuri.out","w",stdout);
	
	scanf("%d",&t);
	for( ; t-- ; ) {
		scanf("%d %d %d %d %d %d %d",&x,&y,&z,&a,&b,&c,&n);
		init_matrix();
		printf("%d\n",solve());
	}
	
	
return 0;
}