Cod sursa(job #609018)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 19 august 2011 02:27:03
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

const int MOD=666013;
int I[4][4],M[4][4];
int T,X,Y,Z,A,B,C,N;

void mult(int A[4][4], int B[4][4], int C[4][4]) {
	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]= (C[i][j] + (long long) A[i][k] * B[k][j]) % MOD;
}

void explog(int I[4][4], int P) {
	int K[4][4],AUX[4][4];
	
	K[1][1]=0; K[1][2]=1; K[1][3]=0;
	K[2][1]=0; K[2][2]=0; K[2][3]=1;
	K[3][1]=C; K[3][2]=B; K[3][3]=A;
	
	while(P>0) {
		if(P&1) {
			memset(AUX,0,sizeof(AUX));
			mult(K,I,AUX);
			memcpy(I,AUX,sizeof(AUX));
		}
		
		memset(AUX,0,sizeof(AUX));
		mult(K,K,AUX);
		memcpy(K,AUX,sizeof(AUX));
		
		P/=2;
	}
}

int main() {
	for(fin >> T; T; T--) {
		fin >> X >> Y >> Z >> A >> B >> C >> N;
		
		memset(I,0,sizeof(I));
		I[1][1]=X; I[2][1]=Y; I[3][1]=Z;
		
		explog(I,N-2);
		
		fout << I[3][1] << '\n';
	}
	
}