Cod sursa(job #644299)

Utilizator ELHoriaHoria Cretescu ELHoria Data 5 decembrie 2011 23:41:15
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <cstring>

using namespace std;

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

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

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

	memcpy(A,aux,sizeof(aux));
}

int lgpow(int p)
{
	int a[3][3] = {{1,0,0},{0,1,0},{0,0,1}} , ans = 0,
		M[3][3] = {{0, 1, 0}, {0, 0, 1}, {C, B, A}};
	for(;p;p>>=1) {
		if(p & 1)
			mult(a,M) , p--;
		mult(M,M);
	}
	for(int i = 0;i<3;++i)
		ans = (ans + 1ll*a[0][i]*D[i]%mod)%mod;
	return ans;
}

int main()
{
	for(fin>>T;T;T--)
	{
		fin>>D[0]>>D[1]>>D[2]>>A>>B>>C>>N;
		fout<< lgpow(N) <<'\n';
	}
	return 0;
}