Cod sursa(job #1122050)

Utilizator stefan.friptuPetru Stefan Friptu stefan.friptu Data 25 februarie 2014 15:38:04
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <cstdio>
#include <cstring>

#define MOD 666013

using namespace std;

long A,B,C,x,y,z,n,tc;
long a[4][4],b[4][4],c[4][4];

void set0 (long m[4][4])
{
    for(long i=1;i<=3;i++)
        for(long j=1;j<=3;j++)
            m[i][j]=0;
}

void copy (long dest[4][4], long src[4][4])
{
    for(long i=1;i<=3;i++)
        for(long j=1;j<=3;j++)
            dest[i][j]=src[i][j];
}

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

int main()
{
    freopen ("iepuri.in","r",stdin);
    freopen ("iepuri.out","w",stdout);

    scanf("%ld",&tc);

    while(tc--)
    {
        scanf("%ld%ld%ld%ld%ld%ld%ld",&A,&B,&C,&x,&y,&z,&n);
        set0(a);
        set0(b);
        a[1][2]=a[2][3]=1;;
        a[3][1]=z,a[3][2]=y,a[3][3]=x;
        b[1][1]=b[2][2]=b[3][3]=1;
        n=n-2;
        while(n){
            if(n%2)
                multiply(b,a,c);
            multiply(a,a,c);
            n/=2;
        }
        printf("%ld\n",(b[3][1]*A+b[3][2]*B+b[3][3]*C)%MOD);
    }

    return 0;
}