Cod sursa(job #381195)

Utilizator ooctavTuchila Octavian ooctav Data 9 ianuarie 2010 16:34:26
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <cstring>
#define MOD 666013

long long T,X,Y,Z,A,B,C,N;
long long PU[4];
long long M[4][4];

void calcp();
void inmulteste();
void inmulteste2();


int main()
{

	freopen("iepuri.in","r",stdin);
	freopen("iepuri.out","w",stdout);
	scanf("%d",&T);
	
	for(int i=1;i<=T;i++)
	{
		scanf("%d %d %d",&X,&Y,&Z);
		scanf("%d %d %d",&A,&B,&C);
		scanf("%d",&N);
		
		M[1][1]=0;M[1][2]=0;M[1][3]=C;
		M[2][1]=1;M[2][2]=0;M[2][3]=B;
		M[3][1]=0;M[3][2]=1;M[3][3]=A;
		
		PU[1]=X;PU[2]=Y;PU[3]=Z;
		
		calcp();
		
		printf("%d\n",PU[3]);
	}
	
	return 0;
}

void calcp()
{
	N=N-2;
	while(N)
	{
		if(N%2)
			inmulteste();
		inmulteste2();
		N=N/2;;
	}
}

void inmulteste()
{
	long long T[4];
	T[1]=0,T[2]=0;

	T[1]=(PU[1]*M[1][1]+PU[2]*M[2][1]+PU[3]*M[3][1])%MOD;
	T[2]=(PU[1]*M[1][2]+PU[2]*M[2][2]+PU[3]*M[3][2])%MOD;
	T[3]=(PU[1]*M[1][3]+PU[2]*M[2][3]+PU[3]*M[3][3])%MOD;
	
	PU[1]=T[1]%MOD;
	PU[2]=T[2]%MOD;
	PU[3]=T[3]%MOD;
}

void inmulteste2()
{
	long long T[4][4];
	
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
			T[i][j]=0;
	
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
			for(int l=1;l<=3;l++)
				T[i][j]=(T[i][j]+M[i][l]*M[l][j])%MOD;

	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
			M[i][j]=T[i][j]%MOD;
	
}