Cod sursa(job #535146)

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

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

    }
}