Cod sursa(job #198478)

Utilizator crisy_girlpop cristina crisy_girl Data 11 iulie 2008 18:16:03
Problema Iepuri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <stdio.h>
#include <stdlib.h>

typedef long long mat[5][5];

mat A,AUX,REZ;
int X,Y,Z,N,T;

inline void putere(mat& m1 , mat& m2 , mat& m3)
{
     for (int i = 1; i<= 3 ; ++i)
         for (int j = 1; j<=3; ++j)
             AUX[i][j]=0;
     for (int i =1; i<=3; ++i)
         for (int j=1; j<=3 ; ++j)
             for (int k=1; k<=3; ++k) 
                 AUX[i][j]+=((long long)m1[i][k]*m2[k][j]) % 666013;
     for (int i = 1; i<= 3 ; ++i)
         for ( int j=1 ; j<=3 ; ++j)
             m3[i][j]=AUX[i][j] % 666013;        
}

int main()
{
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    scanf("%d ", &T);
    for (; T ;--T)
    {
        scanf("%d %d %d %d %d %d %d", &X,&Y,&Z,&A[3][3],&A[3][2],&A[3][1],&N);
 //       N -= 2;
        A[1][2]=1;A[2][3]=1;
        REZ[1][1]=REZ[2][2]=REZ[3][3]=1;
        for ( int p=1; p<= N ; p<<=1)
        {
         /*   for (int i = 1; i<= 3 ; ++i,printf("\n"))
                for (int j = 1; j<=3; ++j)
                    printf("%d ",A[i][j]);*/
            if (p & N) putere(A,REZ,REZ);
            putere(A,A,A);
        }
        printf("%lld\n",((long long)REZ[1][1]*X +(long long)REZ[1][2]*Y + (long long)REZ[1][3]*Z) % 666013);
        for (int i = 1; i<= 3 ; ++i)
            for (int j = 1; j<=3; ++j)
            {
                A[i][j]=0;REZ[i][j]=0;
            }
                        
    }
    return 0;
}