Cod sursa(job #131389)

Utilizator c_sebiSebastian Crisan c_sebi Data 3 februarie 2008 18:34:24
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream.h>
#define M 666013

int n, A, B, C, p0, p1, p2;

struct matr{
int a[3][3]; } p={0, 1, 0,
					0, 0, 1,
					0, 0, 0 }, I={1, 0, 0, 0, 1, 0, 0, 0, 1};


void prod (matr A, matr B, matr &C){
	int i, j, k;
	for(i=0; i<3; i++)
		for(j=0; j<3; j++)
			for(C.a[i][j]=k=0; k<3; k++)
				C.a[i][j] = (C.a[i][j]+((long)A.a[i][k]*B.a[k][j])%M)%M;
}

matr pow(matr A, int n){
	matr B, C;
	if(n==0) return I;
	if(n==1) return A;

	B = pow(A, n/2);
	prod(B, B, C);
	if(n%2==0) return C;
	else {prod(A, C, C); return C; }
}


int main(){
	int T;
	matr r;
	ifstream f("iepuri.in");
	ofstream g("iepuri.out");
	f>>T;
	while(T--){
		f>>p0>>p1>>p2>>A>>B>>C>>n;
		p.a[2][0]=C; p.a[2][1]=B; p.a[2][2]=A;
		r = pow(p, n-2);
		g << (p0*r.a[2][0] + p1*r.a[2][1] + p2*r.a[2][2])%M << "\n";
	}
	f.close();
	g.close();
	return 0;
}