Cod sursa(job #807784)

Utilizator chimistuFMI Stirb Andrei chimistu Data 5 noiembrie 2012 18:27:58
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <cstdio>
#include <cstdlib>
FILE*f;
FILE*g;

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

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

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

int main()
{
    int i,j,o,a,b,c,x,y,z,k,t,n;
    int I[3][1],q[3][1];
    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,&c,&x,&y,&z);
      //  fscanf(f,"%d",&n);
        I[1][1]=x;I[2][1]=y;I[3][1]=z;
        fscanf(f,"%d",&n);
        for (i=1;i<=3;i++)
            for (j=1;j<=3;j++)
                A[i][j]=0;
        A[1][1]=1;A[2][2]=1;A[3][3]=1;
        X[1][1]=0;X[1][2]=1;X[1][3]=0;X[2][1]=0;X[2][2]=0;X[2][3]=1;X[3][1]=c;X[3][2]=b;X[3][3]=a;
        for (i=0;(1<<i)<=(n-2);++i)
        {
            if (((1<<i)&(n-2))>0)
               inmult_matr1(A,X);
            inmult_matr2(X,X);
            }
        q[1][1]=0;q[2][1]=0;q[3][1]=0;I[3][1]=z;
        for (i=1;i<=3;i++)
            for (j=1;j<=1;j++)
                for (k=1;k<=3;k++)
                    q[i][j]=(q[i][j]+A[i][k]*I[k][j])%666013;
        fprintf(g,"%d \n",q[1][3]);}
    return 0;
        
}