Cod sursa(job #809132)

Utilizator chimistuFMI Stirb Andrei chimistu Data 7 noiembrie 2012 21:59:42
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <cstdio>
#include <cstdlib>
FILE*f;
FILE*g;

long long A[3][3],X[3][3];

void inmult_matr1(long long h[3][3], long long e[3][3], long long r[3][3])
{
     long long c[3][3];
     int i,j,k;
     for (i=0;i<3;i++)
         for (j=0;j<3;j++)
             c[i][j]=0;
    for (i=0;i<3;i++)
         for (j=0;j<3;j++)
             for (k=0;k<3;k++)
                 c[i][j]=((e[i][k]*r[k][j])%666013+c[i][j])%666013;
     for (i=0;i<3;i++)
         for (j=0;j<3;j++)
             h[i][j]=c[i][j];
}

int main()
{
    int i,j,o,a,b,d,x,y,z,k,t,n,q;
    f=fopen("iepuri.in","r");
    g=fopen("iepuri.out","w");
    fscanf(f,"%d",&t);
    for (o=1;o<=t;o++)
    {
        fscanf(f,"%d%d%d%d%d%d",&a,&b,&d,&x,&y,&z);
        fscanf(f,"%d",&n);
        for (i=0;i<3;i++)
            for (j=0;j<3;j++)
                A[i][j]=0;
        A[0][0]=1;A[1][1]=1;A[2][2]=1;
        X[0][0]=0;X[0][1]=1;X[0][2]=0;X[1][0]=0;X[1][1]=0;X[1][2]=1;X[2][0]=d;X[2][1]=b;X[2][2]=a;
        for (i=0;(1<<i)<=(n);++i)
        {
            if (((1<<i)&(n))>0)
               inmult_matr1(A,A,X);
            inmult_matr1(X,X,X);
            }
        q=(A[0][0]%666013*x)+(A[0][1]%666013*y)+(A[0][2]%666013*z);
      //  q[0][0]=0;q[1][0]=0;q[2][0]=0;I[2][0]=z;
      /*  for (i=0;i<3;i++)
            for (j=0;j<1;j++)
                for (k=0;k<3;k++)
                    q[i][j]=(q[i][j]+A[i][k]*I[k][j])%666013;*/
        fprintf(g,"%d \n",q);}
    return 0;
        
}