Cod sursa(job #631451)

Utilizator sebii_cSebastian Claici sebii_c Data 8 noiembrie 2011 02:47:36
Problema Iepuri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <cstring>
using namespace std;
#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()
{
    ifstream fin("iepuri.in");
    ofstream fout("iepuri.out");
    int t, i;
    int x, y, z, a, b, c, n;
    fin >> t;
    while (t--) {
	fin >> x >> y >> z >> a >> b >> c >> n;
	
	n -= 2;
	int T[3][3] = {{0, 1, 0}, {0, 0, 1}, {c, b, a}};
	int res[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};

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

    	int result = (1ll*res[2][0]*x%MOD + 1ll*res[2][1]*y%MOD + 1ll*res[2][2]*z%MOD)%MOD;
	fout << result << "\n";
    }
    return 0;
}