Cod sursa(job #233045)

Utilizator raduzerRadu Zernoveanu raduzer Data 16 decembrie 2008 19:27:02
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <cstring>

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 z[3][3];
	int i, j, k;

	for (i = 0; i < 3; ++i)
		for (j = 0; j < 3; ++j) z[i][j] = 0;

	for (i = 0; i < 3; ++i)
		for (j = 0; j < 3; ++j)
			for (k = 0; k < 3; ++k) z[i][j] += (a[i][k] * b[k][j]) % 666013;
	
	for (i = 0; i < 3; ++i)
		for (j = 0; j < 3; ++j)
			b[i][j] = z[i][j] % 666013;
}

int main() 
{
	long long i;
	int j; 
	freopen("iepuri.in", "r", stdin);
	freopen("iepuri.out", "w", stdout);

	scanf("%d", &t);

	for (; 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 (i = 1; i <= n; i <<= 1) 
		{
			if (n & i) mult(a,b);
			mult(a,a);
		}

		printf("%lld\n", (b[0][0]*x + b[0][1]*y + b[0][2]*z) % 666013);

		for (j = 0; j < 3; ++j) 
		{
			memset(a[j], 0, sizeof(a[j]));
			memset(b[j], 0, sizeof(b[j]));
		}
	}
}