Cod sursa(job #993500)

Utilizator andrettiAndretti Naiden andretti Data 3 septembrie 2013 23:33:39
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>
#define mod 666013
using namespace std;

int t,x,y,z,a,b,c,n;
int add[4][4],sol[4][4];

void init()
{
    add[1][1]=a; add[1][2]=1; add[1][3]=0;
    add[2][1]=b; add[2][2]=0; add[2][3]=1;
    add[3][1]=c; add[3][2]=0; add[3][3]=0;

    sol[1][1]=1; sol[1][2]=0; sol[1][3]=0;
    sol[2][1]=0; sol[2][2]=1; sol[2][3]=0;
    sol[3][1]=0; sol[3][2]=0; sol[3][3]=1;
}

void up(int m1[4][4],int m2[4][4])
{
    int aux[4][4];
    for(int i=1;i<=3;i++)
     for(int j=1;j<=3;j++)
     {
        aux[i][j]=0;
        for(int k=1;k<=3;k++)
         aux[i][j]=(aux[i][j]+(m1[i][k]*m2[k][j])%mod)%mod;
     }
    for(int i=1;i<=3;i++)
     for(int j=1;j<=3;j++)
      m1[i][j]=aux[i][j];
}

void read()
{
    int solf,k,i;
    scanf("%d",&t);
    for(k=1;k<=t;k++)
    {
        scanf("%d%d%d",&x,&y,&z);
        scanf("%d%d%d%d",&a,&b,&c,&n);

        init();
        for(i=0;(n>>i);i++)
        {
            if( ((n>>i)&1) ) up(sol,add);
            up(add,add);
        }
        solf=0;
        solf=(z*sol[1][3])%mod+(y*sol[2][3])%mod+(x*sol[3][3])%mod;
        solf%=mod; printf("%d\n",solf);
    }
}

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

    read();
    fclose(stdin);
    fclose(stdout);
    return 0;
}