Cod sursa(job #631448)

Utilizator sebii_cSebastian Claici sebii_c Data 8 noiembrie 2011 02:36:09
Problema Iepuri Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
#include <string.h>
#define MOD 666013

void matrix_mult(int (*A)[3], int (*B)[3])
{
    int i, j, k;
    int aux[3][3];
    memset(aux, 0, sizeof(aux));

    for (i=0; i<3; ++i)
	for (j=0; j<3; ++j)
	    for (k=0; k<3; ++k)
		aux[i][j] += (1ll*A[i][k]*B[k][j])%MOD;

    memcpy(A, aux, sizeof(aux));
} 
    
int main()
{
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    int t, i;
    int x, y, z, a, b, c, n;
    scanf("%d", &t);
    while (t--) {
	scanf("%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &n);

	int T[3][3] = {{0, 0, c}, {1, 0, b}, {0, 1, a}};
	int res[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};

	n -= 2;

	for (i=0; (1<<i)<=n; ++i) {
	    if ((1<<i) & n)
		matrix_mult(res, T);
	    matrix_mult(T, T);
	}

	long long result = (1ll*res[2][0]*x%MOD + 1ll*res[2][1]*y%MOD + 1ll*res[2][2]*z%MOD)%MOD;
	printf("%lld\n", result);
    }
    return 0;
}