Cod sursa(job #810139)

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

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