Cod sursa(job #253205)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 15:53:40
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.73 kb
 #include <stdio.h>  
 #include <math.h>  
   
 #define MOD 666013  
   
 long long x, y, z, A, B, C, i, j, k, n, a[4][4], t, rez, b[4][4], nr, c[4][4], q, r;  
   
 void mul(long long ex);  
   
 int main() {  
     freopen("iepuri.in", "r", stdin);  
     freopen("iepuri.out", "w", stdout);  
     scanf("%lld", &t);  
     while (t--) {  
         scanf("%lld %lld %lld %lld %lld %lld %lld", &x, &y, &z, &A, &B, &C, &n);  
         a[1][1] = 0;a[1][2] = 1;a[1][3] = 0;  
         a[2][1] = 0;a[2][2] = 0;a[2][3] = 1;  
         a[3][1] = C;a[3][2] = B;a[3][3] = A;  
         for (i = 1; i <= 3; ++i) {  
             for (j = 1; j <= 3; ++j) {  
                 b[i][j] = a[i][j];  
                 c[i][j] = 0;  
             }  
         }  
         mul(n - 1);  
         a[1][1] = x;a[1][2] = 0;a[1][3] = 0;  
         a[2][1] = y;a[2][2] = 0;a[2][3] = 0;  
         a[3][1] = z;a[3][2] = 0;a[3][3] = 0;  
         for (i = 1; i <= 3; ++i) {  
             for (j = 1; j <= 3; ++j) {  
                 c[i][j] = 0;  
             }  
         }  
         for (i = 1; i <= 3; ++i) {  
             for (j = 1; j <= 3; ++j) {  
                 for (k = 1; k <= 3; ++k) {  
                     c[i][j] = ((c[i][j] % MOD) + ((b[i][k] % MOD) * (a[k][j] % MOD)) % MOD) % MOD;  
                 }  
             }  
         }  
         printf("%lld\n", c[1][1]);  
     }  
     return 0;  
 }  
   
 void mul(long long ex) {  
     long long i, j, k;  
     rez = 0;  
     while (ex) {  
         if (ex % 2 == 0) {  
             for (i = 1; i <= 3; ++i) {  
                 for (j = 1; j <= 3; ++j) {  
                     for (k = 1; k <= 3; ++k) {  
                         c[i][j] = ((c[i][j] % MOD) + ((a[i][k] % MOD) * (a[k][j] % MOD)) % MOD) % MOD;  
                     }  
                 }  
             }  
             for (i = 1; i <= 3; ++i) {  
                 for (j = 1; j <= 3; ++j) {  
                     a[i][j] = c[i][j];  
                 }  
             }  
             ex /= 2;  
         } else {  
             for (i = 1; i <= 3; ++i) {  
                 for (j = 1; j <= 3; ++j) {  
                     for (k = 1; k <= 3; ++k) {  
                         c[i][j] = ((c[i][j] % MOD) + ((a[i][k] % MOD) * (b[k][j] % MOD)) % MOD) % MOD;  
                     }  
                 }  
             }  
             for (i = 1; i <= 3; ++i) {  
                 for (j = 1; j <= 3; ++j) {  
                     b[i][j] = c[i][j];  
                 }  
             }  
             --ex;  
         }  
         for (i = 1; i <= 3; ++i) {  
             for (j = 1; j <= 3; ++j) {  
                 c[i][j] = 0;  
             }  
         }  
     }
}