Cod sursa(job #1387199)

Utilizator popicaPopescu Victor popica Data 13 martie 2015 20:00:47
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include<cstdio>
int t,i,j,n,m,k,a,b,c,x,y,z,q[4][4],cq[4][4],ccq[4][4];
void mult(int nr)
    {
    cq[1][1]=0;
    cq[1][2]=0;
    cq[1][3]=c;
    cq[2][1]=1;
    cq[2][2]=0;
    cq[2][3]=b;
    cq[3][1]=0;
    cq[3][2]=1;
    cq[3][3]=a;
    nr--;
    while(nr!=0)
        {
        if(nr%2==0)
            {
            nr/=2;
            int lin,col,l1;
            for(lin=1;lin<=3;lin++)
                for(col=1;col<=3;col++)
                    {
                    int x=0;
                    for(l1=1;l1<=3;l1++)
                        x+=q[lin][l1]*q[l1][col];
                    ccq[lin][col]=x%666013;
                    }
            for(lin=1;lin<=3;lin++)
                for(col=1;col<=3;col++)
                    q[lin][col]=ccq[lin][col];
            }
        else
            {
            nr--;
            int lin,col,l1;
            for(lin=1;lin<=3;lin++)
                for(col=1;col<=3;col++)
                    {
                    int x=0;
                    for(l1=1;l1<=3;l1++)
                        x+=cq[lin][l1]*q[l1][col];
                    ccq[lin][col]=x%666013;
                    }
            for(lin=1;lin<=3;lin++)
                for(col=1;col<=3;col++)
                    cq[lin][col]=ccq[lin][col];
            }
        }
    }
int main ()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%d",&t);
for(i=1;i<=t;i++)
    {
    scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
    q[2][1]=1;
    q[3][2]=1;
    q[1][3]=c;
    q[2][3]=b;
    q[3][3]=a;
    mult(n-2);
    int lin,col;
    int qq=x*cq[1][3]+y*cq[2][3]+z*cq[3][3];
    printf("%d\n",qq%666013);
    for(lin=1;lin<=3;lin++)
        for(col=1;col<=3;col++)
            q[lin][col]=cq[lin][col]=ccq[lin][col]=0;
    }
return 0;
}