Cod sursa(job #274148)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 9 martie 2009 14:40:10
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<stdio.h>
#define Q 666013

long long x, y, z, a, b, c, n, t, C[5][5], s[5][5], m[5][5];

inline void mul1(){
long long  i ,j ,k;
     for (i = 1; i <= 3; i++) for (j = 1; j <= 3; j++){
             C[i][j] = 0;

             for (k = 1; k <= 3; k++) C[i][j] += s[i][k] * m[k][j];
         }
     for (i = 1; i <= 3; i++) for (j = 1; j <= 3; j++)
             s[i][j] = C[i][j] % Q;
}

inline void mul2(){
long long  i, j, k;
     for (i = 1; i <= 3; i++) for (j = 1; j <= 3; j++){
             C[i][j] = 0;
             for (k = 1; k <= 3 ; k++) C[i][j] += m[i][k] * m[k][j];
             }
     for (i = 1; i <= 3; i++) for (j = 1; j <= 3; j++)
             m[i][j] = C[i][j] % Q;
}


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

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

    scanf("%lld", &t);

    for (int crt = 1; crt <= t; crt++){
        scanf("%lld %lld %lld %lld %lld %lld %lld",&x,&y,&z,&a,&b,&c,&n);}
        init();
        for (p = 1; p <= n; p <<= 1){
              if (p & n) mul1();
              mul2();
        }
        printf("%lld\n",( ( s[1][1] * x ) % Q + ( s[2][1] * y ) % Q + ( s[3][1] * z ) % Q ) % Q);
    }
    return 0;
}