Cod sursa(job #1041420)

Utilizator thewildnathNathan Wildenberg thewildnath Data 25 noiembrie 2013 20:07:58
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<stdio.h>
#include<string.h>
using namespace std;

#define MOD 666013

int A,B,C;
long long ab[5][5],mat[5][5],c[5][5];


inline void inm(long long a[5][5],long long b[5][5],long long c[5][5])
{
    int i,j,k;
    for(i=1;i<=3;++i)
        for(j=1;j<=3;++j)
            for(k=1;k<=3;++k)
                c[i][j]=(c[i][j]+a[i][k]*b[k][j]*1LL)%MOD;
}


int main()
{
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    int t,n,i,x,y,z;

    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d%d%d%d",&x,&y,&z,&A,&B,&C,&n);

        memset(ab,0,sizeof(ab));
        memset(mat,0,sizeof(mat));

        mat[2][1]=1;
        mat[3][2]=1;
        mat[1][3]=A;
        mat[2][3]=B;
        mat[3][3]=C;

        ab[1][1]=ab[2][2]=ab[3][3]=1;

        /*a[1][1]=x;
        a[1][2]=y;
        a[1][3]=z;*/

        n-=2;
        for(;n;n>>=1)
        {
            if(n&1)
            {
                memset(c,0,sizeof(c));
                inm(ab,mat,c);
                memcpy(ab,c,sizeof(c));
            }
            memset(c,0,sizeof(c));
            inm(mat,mat,c);
            memcpy(mat,c,sizeof(c));
        }
        printf("%d\n",(ab[1][3]*x+ab[2][3]*y+ab[3][3]*z)%MOD);
    }

    return 0;
}