Cod sursa(job #647634)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 11 decembrie 2011 17:41:07
Problema Iepuri Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>
#define N 666013
#define lul unsigned long long
lul e[3][3],d[3][3],u[3][3],v[3][3];
int a,b,c,x,y,z,t,n;

void M(lul a[3][3],lul b[3][3],lul c[3][3])
{int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
      {a[i][j]=0;
      for(k=0;k<3;k++)
             a[i][j]=((a[i][j]%N)+(((b[i][k]%N)*(c[k][j]%N))%N))%N;}}
             
void C(lul a[3][3],lul b[3][3])
{int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
      a[i][j]=b[i][j];}

int main()
{freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%d",&t);
while(t--)
       {scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
       d[0][0]=d[0][2]=0,d[0][1]=1;
       d[1][0]=d[1][1]=0,d[1][2]=1;
       d[2][0]=c,d[2][1]=b,d[2][2]=a,n-=2;
       e[0][0]=e[1][1]=e[2][2]=1;
       while(n)
               {if(n%2)
                      M(u,d,e),C(e,u);
               n>>=1;
               M(v,d,d),C(d,v);}
       printf("%d\n",((((e[2][0]%N)*(x%N))%N)+(((e[2][1]%N)*(y%N))%N)+(((e[2][2]%N)*(z%N))%N))%N);}
return 0;}