Cod sursa(job #215872)

Utilizator lamez0rBogdan Bondor lamez0r Data 21 octombrie 2008 17:39:58
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
   #include <stdio.h>  
     
   long long a[4][4], kkt[4][4], rez[4][4];  
     
   void mul(long long a[4][4], long long b[4][4])  
   {  
       int i, j, k, c[4][4];  
       for (i = 1; i <= 3; i ++) {  
           for (j = 1; j <= 3; j ++) c[i][j] = 0;  
           for (j = 1; j <= 3; j ++) {  
               for (k = 1; k <= 3; k ++) {  
                   c[i][k] += ((long long) (a[i][j] * b[j][k])) % 666013;  
               }  
           }  
       }  
     
       for (i = 1; i <= 3; i ++) {  
           for (j = 1; j <= 3; j ++) a[i][j] = c[i][j];  
       }  
   }  
     
   void putere(int N)  
   {  
       for (; N; N >>= 1) {  
           if (N & 1) mul(rez, kkt);  
           mul(kkt, kkt);  
       }  
   }  
     
   int main()  
   {  
       freopen("iepuri.in", "r", stdin);  
     
       freopen("iepuri.out", "w", stdout);  
     
     
       int T, X, Y, Z, A, B, C, N, i, j;  
       for (scanf("%d\n", &T); T; T --) {  
           scanf("%d %d %d %d %d %d %d\n", &X, &Y, &Z, &A, &B, &C, &N);  
     
           a[1][1] = 1, a[1][2] = 0, a[1][3] = C;  
           a[2][1] = 1, a[2][2] = 0, a[2][3] = B;  
           a[3][1] = 0, a[3][2] = 1, a[3][3] = A;  
     
           rez[1][1] = 1, rez[1][2] = 0, rez[1][3] = 0;  
           rez[2][1] = 0, rez[2][2] = 1, rez[2][3] = 0;  
           rez[3][1] = 0, rez[3][2] = 0, rez[3][3] = 1;  
     
           for (i = 1; i <= 3; i ++) {  
               for (j = 1; j <= 3; j ++) {  
                   kkt[i][j] = a[i][j];  
               }  
           }  
     
           putere(N - 2);  
     
           printf("%lld\n", (((long long) X * rez[1][3]) % 666013 + ((long long) Y * rez[2][3] % 666013) + ((long long) Z * rez[3][3]) % 666013) % 666013);  
       }  
     
       return 0;  
   }