Cod sursa(job #173308)

Utilizator rethosPaicu Alexandru rethos Data 7 aprilie 2008 17:00:14
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <stdio.h>
#define mod 666013
long long t,x,y,z,a,b,c,n;
//calculeaza produsula a doua matrici si il pune in rez;
void prod(long long A[3][3],int la,int ca,long long B[3][3],int lb,int cb,long long rez[3][3])
{int i,j,k;
 for (i=0;i<la;i++)
    for (j=0;j<cb;j++)
       {rez[i][j]=0;
        for (k=0;k<ca;k++)
          rez[i][j]+=A[i][k]*B[k][j];
          rez[i][j]=rez[i][j]%mod;
       }
}
//calculeaza puterea k a unei matrici m cu l linii si c coloane
//si il pune in matrice rez
void pow(long long m[3][3],int l,int c,int k,long long rez[3][3])
{long long i,j,aux[3][3];
 if (k==1)
	 {for (i=0;i<l;i++)
          	for (j=0;j<c;j++)
                   rez[i][j]=m[i][j];
          return;
         }
 if (k%2==0)
   	 {pow(m,l,c,k/2,aux);
          prod(aux,3,3,aux,3,3,rez);
          return;
         }
	else
         {pow(m,l,c,k-1,aux);
          prod(aux,3,3,m,3,3,rez);
          return;
         }
}
//main
int main()
{freopen("iepuri.in","r",stdin);
 freopen("iepuri.out","w",stdout);
 scanf("%d",&t);
 int i,j;
 long long M[3][3],rez[3][3],A[3][3],B[3][3];
 M[0][0]=0;M[0][1]=1;M[0][2]=0;
 M[1][0]=0;M[1][1]=0;M[1][2]=1;
 for (i=0;i<=2;i++)
    for (j=1;j<=2;j++)
       A[i][j]=B[i][j]=0;
 for (i=1;i<=t;i++)
    {scanf("%lld %lld %lld %lld %lld %lld %lld",&x,&y,&z,&a,&b,&c,&n);
     a%=mod;
     b%=mod;
     c%=mod;
     M[2][0]=c;M[2][1]=b;M[2][2]=a;
     A[0][0]=x;A[1][0]=y;A[2][0]=z;
     pow(M,3,3,n,rez);
     prod(rez,3,3,A,3,3,B);
     printf("%d\n",B[0][0]);
    }
 return 0;
}