Cod sursa(job #630054)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 4 noiembrie 2011 16:39:52
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#include <cstring>

#define file_in "iepuri.in"
#define file_out "iepuri.out"

#define mod 666013

int T,X,Y,Z,A,B,C,N;
int sol[3][3];
int m[3][3];

void mul(int a[3][3],int b[3][3]){
	int i,j,k;
	int c[3][3];
	memset(c,0,sizeof(c));
	
	for (i=0;i<3;++i)
		 for (j=0;j<3;++j)
			  for (k=0;k<3;++k)
				   c[i][j]=(1LL*c[i][j]+1LL*a[i][k]*b[k][j])%mod;
	memcpy(a,c,sizeof(c));
}	

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d", &T);
	
	while(T--){
		
		scanf("%d %d %d %d %d %d %d", &X, &Y, &Z, &A, &B, &C, &N);
	
        int m[3][3]={ {0,0,C}, {1,0,B}, {0,1,A} }; 
		int sol[3][3]={ {1,0,0}, {0,1,0}, {0,0,1} }; 
		N-=2;
		
		while(N){
			if (N%2)
				mul(sol,m);
			mul(m,m);
			N/=2;
		}
		
		printf("%d\n", ((1LL*Z*sol[2][2])%mod+(1LL*Y*sol[1][2])%mod+(1LL*sol[0][2]*X)%mod)%mod);
		
	}
	
	return 0;
	
}