Cod sursa(job #644297)

Utilizator ELHoriaHoria Cretescu ELHoria Data 5 decembrie 2011 23:29:12
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <cstring>

using namespace std;

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

const int mod = 666013;
int T , D[3] , M[3][3] , A , B , C , N;

void mult(int A[3][3],int B[3][3],int C[3][3])
{
	for(int i = 0;i<3;++i)
		for(int j = 0;j<3;++j)
			for(int k = 0;k<3;++k)
				C[i][j] +=A[i][k] * B[k][j]%mod;
}

void lgpow(int p)
{
	int aux[3][3] , a[3][3];
	memcpy(a,M,sizeof(M));
	for(;p;p>>=1) {
		if(p & 1)
		{
			p--;
			memset(aux,0,sizeof(aux));
			mult(M,a,aux);
			memcpy(M,aux,sizeof(aux));
		}
		memset(aux,0,sizeof(aux));
		mult(a,a,aux);
		memcpy(a,aux,sizeof(aux));
	}
}

int main()
{
	for(fin>>T;T;T--)
	{
		fin>>D[0]>>D[1]>>D[2];
		fin>>A>>B>>C>>N;
		M[0][0] = 0 , M[0][1] = 1 , M[0][2] = 0;
		M[1][0] = M[1][1] = 0 , M[1][2] = 1;
		M[2][0] = C , M[2][1] = B , M[2][2] = A;
		lgpow(N-1);
		int ans = (1ll*M[0][0] * D[0]%mod + 1ll*M[0][1] * D[1]%mod + 1ll* M[0][2]*D[2]%mod)%mod;
		fout<< ans <<'\n';
	}
	return 0;
}