Cod sursa(job #46571)

Utilizator razvi9Jurca Razvan razvi9 Data 2 aprilie 2007 19:10:04
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>
#include<string.h>
long long a[4][4];
long long A,B,C,x,y,z,n,t;
void inm(long long a[4][4],long long b[4][4])
{long long i,j,k;
 long long c[4][4];
 memset(c,0,sizeof(long long)*16);
 for(i=1;i<=3;i++)
 for(j=1;j<=3;j++)
  for(k=1;k<=3;k++)
   c[i][j]=(c[i][j]+a[i][k]*b[k][j])%666013;
 memcpy(b,c,sizeof(long long)*16);}
void put(long long a[4][4],long long n)
{if(n==1) return;
 long long b[4][4];
 memcpy(b,a,sizeof(long long)*16);
 put(b,n/2);
 inm(b,b);
 if(n%2) inm(a,b);
 memcpy(a,b,sizeof(long long)*4*4);}
long long rez(long long a[4][4],long long x,long long y,long long z)
{return a[1][1]*x+a[1][2]*y+a[1][3]*z;}
int main()
{freopen("iepuri.in","r",stdin);
 freopen("iepuri.out","w",stdout);
 scanf("%lld",&t);
 a[1][2]=1;
 a[2][3]=1;
 for(;t;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;
 put(a,n);
 printf("%lld\n",rez(a,x,y,z));
 }
 fclose(stdout);
 return 0;}