Cod sursa(job #1373101)

Utilizator VisanCosminVisan Tudor Cosmin VisanCosmin Data 4 martie 2015 16:48:49
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <stdio.h>

#define MOD 666013

long a[3][3],sol[3][3],t,x,y,z,A,B,C;

void MX(long (*a)[3],long b[3][3])
{
    int c[4][4];
    for(int i = 0 ; i<3;i++)
        for(int j = 0 ;j < 3 ;j++)
        {
            c[i][j] = 0;
            for(int k = 0 ;k<3;k++)
            c[i][j] = (c[i][j]+a[i][k]*b[k][j])%MOD;
        }
    for(int i = 0 ;i < 3 ;i++)
    {
        for(int j = 0 ;j<3;j++)
            a[i][j] = c[i][j];
    }


}


int main()
{

    FILE * f = fopen("iepuri.in","r");
    FILE * g = fopen("iepuri.out","w");
    int k=0;
    fscanf(f,"%d",&t);
    long long nr = 0,n=0;
    for(int i = 0 ;i<t;i++)
    {
        fscanf(f,"%d%d%d",&x,&y,&z);
        fscanf(f,"%d%d%d%lld",&A,&B,&C,&n);
        n=n%MOD;
        for(int i=0;i<3;i++)
            for(int j = 0 ;j<3;j++)
                sol[i][j]=a[i][j]=0;
        sol[0][0]=a[0][0]=x;sol[0][1]=a[0][1]=y;sol[0][2]=a[0][2]=z;
        sol[1][0]=sol[2][1]=a[1][0]=a[2][1]=1;

        n=n-1;
        bool b;
        for(int j = 0 ;(1<<j)<=n;j++)
        {
            b =(bool)(n&(1<<j));

            if(b!=0)
                MX(sol,a);
            MX(a,a);
        }

        nr = (sol[2][0]*A+sol[2][1]*B+sol[2][2]*C)%MOD;
        fprintf(g,"%lld\n",nr);

    }




    fclose(f);
    fclose(g);

    return 0;
}