Cod sursa(job #895329)

Utilizator wink.itsgoneDragusanu Ana wink.itsgone Data 27 februarie 2013 10:56:33
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>
#define ll long long
#define m 666013
using namespace std;
ll h[3][3],sol[3][3],h3[3][1];
int pas,x,y,z,a,b,c,n;
inline void im(ll A[][3],ll B[][3], ll C[][3] )
{for(register int i=0;i<3;++i) 
	for(register int j=0;j<3;++j)
		{C[i][j]=0;
		 for(register int k=0;k<3;++k)
			 C[i][j]=(C[i][j]+(A[i][k]*B[k][j])%m)%m;                 
		} 
		
}
inline void put(ll A[][3], ll p)
{for (;p;p>>=1)  
	{if ( p&1 ) im(h,A,A);                 
	 im(h,h,h);
	}
}
int main()
{freopen("iepuri.in","rt",stdin);
 freopen("iepuri.out","wt",stdout);
 scanf("%d",&pas);
 for(;pas--;)
	 {scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
	  h[0][0]=a; h[0][1]=b; h[0][2]=c; h[1][0]=h[2][1]=1;
	  h[1][1]=h[1][2]=h[2][0]=h[2][2]=0;
	  h3[0][0]=a*z+b*y+c*x;
	  h3[1][0]=z; h3[2][0]=y;
	  put(sol,n-2);
	  printf("%lld\n", sol[0][0]*h3[0][0] + sol[0][1] * h3[1][0] + sol[0][2] * h3[2][0]);
	 }
}