Cod sursa(job #173201)

Utilizator vlad.maneaVlad Manea vlad.manea Data 7 aprilie 2008 15:05:47
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#define MOD 666013

struct matrice
{
	int F[3][3];
};

matrice U, D, R;

int C, X, Y, Z, A, B, N, T;

matrice prod(struct matrice M, struct matrice P, int I, int J, int K)
{
	int i, j, k;

	struct matrice R;

	for (i = 0; i < I; ++i)
		for (j = 0; j < J; R.F[i][j] %= MOD, ++j)
			for (k = R.F[i][j] = 0; k < K; ++k)
				R.F[i][j] += M.F[i][k] * P.F[k][j];

	return R;
}

struct matrice calc(int N)
{
	struct matrice R;

	int m;

	if (N == 1)
	{
		U.F[0][0] = 0;
		U.F[0][1] = 0;
		U.F[0][2] = C;
		U.F[1][0] = 1;
		U.F[1][1] = 0;
		U.F[1][2] = B;
		U.F[2][0] = 0;
		U.F[2][1] = 1;
		U.F[2][2] = A;
		return U;
	}

	m = N>>1;

	R = calc(m);

	R = prod(R, R, 3, 3, 3);

	if (N%2)
		R = prod(R, U, 3, 3, 3);

	return R;
}

void solve()
{
	freopen("iepuri.in", "r", stdin);
	freopen("iepuri.out", "w", stdout);

	scanf("%d", &T);

	while (T--)
	{
		scanf("%d%d%d%d%d%d%d", &X, &Y, &Z, &A, &B, &C, &N);

		R = calc(N);

		D.F[0][0] = X;
		D.F[0][1] = Y;
		D.F[0][2] = Z;

		R = prod(D, R, 1, 3, 3);

		printf("%d\n", R.F[0][0] % MOD);
	}
}

int main()
{
	solve();

	return 0;
}