Cod sursa(job #81783)

Utilizator alex23alexandru andronache alex23 Data 4 septembrie 2007 14:51:02
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <stdio.h>

long m[4][4],d[4][4],v[4][4],s,n,a,b,c,x,y,z,p;
int k,i,j,t;


int main()
{FILE *fin,*fout;

 fin=fopen("iepuri.in","r");
 fout=fopen("iepuri.out","w");
 fscanf(fin,"%d",&t);



 for (k=1;k<=t;k++)
    {fscanf(fin,"%ld %ld %ld %ld %ld %ld %ld",&x,&y,&z,&a,&b,&c,&n);
     m[1][1]=0;m[1][2]=1;m[1][3]=0;
     m[2][1]=0;m[2][2]=0;m[2][3]=1;
     m[3][1]=c;m[3][2]=b;m[3][3]=a;
     if (n%2==1) for (i=1;i<=3;i++)
                      for (j=1;j<=3;j++)
                         d[i][j]=m[i][j];
           else for (i=1;i<=3;i++)
                      for (j=1;j<=3;j++)
                         if (i==j) d[i][j]=1;
                              else d[i][j]=0;
     n=n/2;
     while (n>0)
       {for (i=1;i<=3;i++)
          for (j=1;j<=3;j++)
             {s=0;
              for (p=1;p<=3;p++)
                 s=s+m[i][p]*m[p][j];
              v[i][j]=s;
              }
        for (i=1;i<=3;i++)
           for (j=1;j<=3;j++)
              m[i][j]=v[i][j];
        if (n%2==1)  {for (i=1;i<=3;i++)
                        for (j=1;j<=3;j++)
                             {s=0;
                              for (p=1;p<=3;p++)
                              s=s+m[i][p]*d[p][j];
                              v[i][j]=s;
                              }
                       for (i=1;i<=3;i++)
                          for (j=1;j<=3;j++)
                              d[i][j]=v[i][j];
                      }
        n=n/2;
       }
    s=d[1][1]*x+d[1][2]*y+d[1][3]*z;
    fprintf(fout,"%ld\n",s);
    }
 fclose(fin);
 fclose(fout);

 return 0;
}