Cod sursa(job #280248)

Utilizator cata.cataIacob Catalin cata.cata Data 13 martie 2009 12:00:34
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 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];

void citire(){scanf("%lld %lld %lld %lld %lld %lld %lld",&x,&y,&z,&a,&b,&c,&n);}

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,C[i];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,C[i];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++){  
           citire();  
           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;  
   }