Cod sursa(job #201272)

Utilizator tvladTataranu Vlad tvlad Data 30 iulie 2008 08:31:55
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>

long long a[3][3], b[3][3];
int x,y,z,n,t;

void mult( long long a[3][3] , long long b[3][3] )
{
	long long aux[3][3];
	for (int i = 0; i < 3; ++i)
		for (int j = 0; j < 3; ++j)
			aux[i][j] = 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] += (a[i][k]*b[k][j]) % 666013;
	for (int i = 0; i < 3; ++i)
		for ( int j = 0; j < 3; ++j)
			b[i][j] = aux[i][j] % 666013;
}

int main() {
	freopen("iepuri.in","rt",stdin);
	freopen("iepuri.out","wt",stdout);
	for (scanf("%d",&t); t; --t) {
		scanf("%d %d %d %d %d %d %d",&x,&y,&z,&a[2][2],&a[2][1],&a[2][0],&n);
		a[0][1] = a[1][2] = 1;
		b[0][0] = b[1][1] = b[2][2] = 1;
		for (long long k = 1; k <= n; k <<= 1) {
			if (n & k) mult(a,b);
			mult(a,a);
		}
		printf("%lld\n",(b[0][0]*x + b[0][1]*y + b[0][2]*z) % 666013);
		for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) a[i][j] = b[i][j] = 0;
	}
	return 0;
}