Cod sursa(job #316737)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 20 mai 2009 22:07:28
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <cstring>

#define file_in "iepuri.in"
#define file_out "iepuri.out"

#define Mod 666013

long long mat[4][4];
long long n,x,y,z,a,b,c;
long long T;
long long mat4[4][4];
long long rez;

void mul(long long (&a)[4][4], long long b[4][4])
{
	int i,j,k;
    long long c[4][4];
    memset(c,0,sizeof(c));
    for (i=1;i<=3;++i)
        for (j=1;j<=3;++j)
            for (k=1;k<=3;++k)
                c[i][j]=(c[i][j]+a[i][k]*b[k][j])%Mod;
    memcpy (a,c,sizeof (c));
}


int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);

	scanf("%lld", &T);
	while(T--)
	{
		memset(mat,0,sizeof(mat));
        mat[1][2]=mat[2][3]=1;

        scanf("%lld %lld %lld", &x, &y, &z);
        scanf("%lld %lld %lld", &a, &b, &c);
        scanf("%lld", &n);
		memset(mat4,0,sizeof(mat4));
		mat4[1][1]=mat4[2][2]=mat4[3][3]=1;
		mat[3][1]=c;
        mat[3][2]=b;
        mat[3][3]=a;
		while(n!=0)
		{
			if (n%2==1)
				mul(mat4,mat);
			mul(mat,mat);
			n/=2;
		}

	rez=((mat4[1][1]*x)%Mod+(mat4[1][2]*y)%Mod+(mat4[1][3]*z)%Mod)%Mod;
    printf("%lld\n", rez);
	}

	fclose(stdin);
	fclose(stdout);

	return 0;
}