Cod sursa(job #46554)

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