Cod sursa(job #811563)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 12 noiembrie 2012 17:35:25
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<fstream>
#define mod 666013
using namespace std;


ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long R[4][4],S[4][4],aux[4][4];
long long x,y,z,a,b,c,n,t;
void copy(long long A[4][4]){
	int i,j;
	for(i=1;i<=3;++i)
		for(j=1;j<=3;++j)
			A[i][j]=aux[i][j];
}
long long multi  (long long A[4][4],long long B[4][4]){
	int i,j,k;
	for(i=1;i<=3;++i)
		for(j=1;j<=3;++j){
			aux[i][j]=0;
			for(k=1;k<=3;++k)
				aux[i][j]=(aux[i][j]+(long long )(A[i][k]*B[k][j]))%mod;
			aux[i][j]%=mod;
		}
	
	copy(A);
}
void lg(long long P[4][4],long long A[4][4],int p){
	
	
	while(p){
		
		if(p%2)
			multi(P,A);
		multi(A,A);
		p/=2;
	}
}
int main () {
	
	f>>t;
	
	
	for(;t;--t) {
		
		f>>x>>y>>z>>a>>b>>c>>n;
		memset(R,0,sizeof(R));
		memset(S,0,sizeof(S));
		R[1][1]=R[2][2]=R[3][3]=S[2][1]=S[3][2]=1;
		S[1][3]=c;S[2][3]=b;S[3  ][3]=a;
		lg(R,S,n-2);
		g<<(x*R[1][3]+y*R[2][3]+z*R[3][3])%mod<<"\n";
	}
	
	return 0;
}