Cod sursa(job #535165)

Utilizator SadmannCornigeanu Calin Sadmann Data 16 februarie 2011 20:29:57
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<stdio.h>
#define mod 666013
FILE *in=fopen("iepuri.in","rt");
FILE *out=fopen("iepuri.out","wt");
long long M[3][3],i,j,aux[3][3];
int x,y,z,N,T,q,k;
int main()
{
    fscanf(in,"%d",&T);
    for(k=1;k<=T;k++)
    {
		long long  M[3][3]={0};
		M[0][1]=1;
		M[1][2]=1;
        fscanf(in,"%d %d %d %lld %lld %lld %d",&x,&y,&z,&M[2][2],&M[2][1],&M[2][0],&N);
		long long sol[3][3]={0};
		sol[0][0]=sol[1][1]=sol[2][2]=1;
        for(i=0;(1LL<<i)<=N;i++)
        {
			if( ((1LL<<i) & N) >0)
            {
				for(q=0;q<=2;q++)
					for(j=0;j<=2;j++)
						aux[q][j]=(M[q][0]*sol[0][j] + M[q][1]*sol[1][j] + M[q][2]*sol[2][j])%mod;
				for(q=0;q<=2;q++)
					for(j=0;j<=2;j++)
						sol[q][j]=aux[q][j];
            }

            for(q=0;q<=2;q++)
                for(j=0;j<=2;j++)
                    aux[q][j]=(M[q][0]*M[0][j] + M[q][1]*M[1][j] + M[q][2]*M[2][j])%mod;
			for(q=0;q<=2;q++)
				for(j=0;j<=2;j++)
					M[q][j]=aux[q][j];

        }
		long long rasp=(x*sol[0][0]+y*sol[0][1]+z*sol[0][2])%mod;
		fprintf(out,"%lld\n",rasp);

    }
}