Cod sursa(job #531854)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 10 februarie 2011 13:56:02
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<stdio.h>
#define Mod 666013

int a[5][5] , s[5][5], c[5][5] ;
int A,B,C,n,T,sol,x,y,z;


void init( int a[5][5] ) 
{
	a[1][1] = a[1][3] = a[2][1] = a[2][2] = 0 ;
	a[1][2] = a[2][3] = 1 ;
	a[3][1] = C ; a[3][2] = B ; a[3][3] = A ;
}

void unitate( int s[5][5] ) 
{
	s[1][1] = s[2][2] = s[3][3] = 1 ;
	s[1][2] = s[1][3] = s[2][1] = s[2][3] = s[3][1] = s[3][2] = 0 ;
}

void mnula( int a[5][5] ) 
{
	a[1][1] = a[1][2] = a[1][3] = a[2][1] = a[2][2] = a[2][3] = a[3][1] = a[3][2] = a[3][3] = 0 ;
}

void copiaza ( int a[5][5], int b[5][5] ) 
{
	int i, j ; 
	
	for( i = 1 ; i <= 3 ; i++ )
		for( j = 1 ; j <= 3 ; j++ )
			a[i][j] = b[i][j] ;
}

void inmulteste ( int a[5][5], int b[5][5] ) 
{
	int i,j,k ;
	
	mnula(c);
	
	for( i = 1 ; i <= 3 ; i++ )
		for( j = 1 ; j <= 3 ; j++ )
			for( k = 1 ; k <= 3 ; k++ )
			{
				c[i][j] += ( a[i][k] * b[k][j] % Mod ) ;
				if( c[i][j] > Mod ) c[i][j] %= Mod ;
			}
}

void lgput( int a[5][5], int b ) 
{
	for( ; b ; b>>=1 ) 
	{
		if( b & 1 ) 
		{
			inmulteste(s,a);
			copiaza(s,c);
		}
		inmulteste(a,a);
		copiaza(a,c);
	}
}

int main()
{
	freopen("iepuri.in","r",stdin);
	freopen("iepuri.out","w",stdout);
	
	scanf("%d",&T);
	
	for( ; T ; --T )
	{
		scanf("%d %d %d %d %d %d %d",&x,&y,&z,&A,&B,&C,&n) ;
		
		init(a);
		unitate(s);
		
		lgput(a,n-2);
		
		sol = ( s[3][3] * z % Mod + s[3][2] * y % Mod + s[3][1] * x % Mod ) % Mod ; 
		
		printf("%d\n",sol);
	}
	
	return 0;
}