Cod sursa(job #1387520)

Utilizator ASTELOTudor Enescu ASTELO Data 14 martie 2015 13:12:27
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include<cstdio>
long long t,i,j,n,m,k,a,b,c,x,y,z,q[4][4],cq[4][4],ccq[4][4];
void mult(long long 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;
            long long lin,col,l1;
            for(lin=1;lin<=3;lin++)
                for(col=1;col<=3;col++)
                    {
                    long long 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--;
            long long lin,col,l1;
            for(lin=1;lin<=3;lin++)
                for(col=1;col<=3;col++)
                    {
                    long long 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("%lld",&t);
for(i=1;i<=t;i++)
    {
    scanf("%lld%lld%lld%lld%lld%lld%lld",&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);
    long long lin,col;
    long long qq=x*cq[1][3]+y*cq[2][3]+z*cq[3][3];
    printf("%lld\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;
}