Pagini recente » Cod sursa (job #345345) | Cod sursa (job #3132088) | Cod sursa (job #679062) | Cod sursa (job #601408) | Cod sursa (job #690013)
Cod sursa(job #690013)
#include<stdio.h>
int SOL[4][4],MAT[4][4],T;
void deschidere()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
}
void inmultirematrice(int A[][4],int B[][4],int C[][4])
{
int i,j,k;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
{
A[i][j]=0;
for(k=1;k<=3;k++)
A[i][j]+=(B[i][k]*C[k][j]);
}
}
void atribuire(int A[][4],int B[][4])
{
int i,j;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
A[i][j]=B[i][j];
}
void explog(int P)
{
int AUX[4][4];
if(P!=1)
if(P%2)
{explog(P-1);inmultirematrice(AUX,SOL,MAT);atribuire(SOL,AUX);}
else
{explog(P/2);inmultirematrice(AUX,SOL,SOL);atribuire(SOL,AUX);}
}
void citire()
{
int X,Y,Z,A,B,C,N,i,j;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d%d%d%d",&X,&Y,&Z,&A,&B,&C,&N);
MAT[1][1]=A;MAT[1][2]=B;MAT[1][3]=C;
MAT[2][1]=1;MAT[2][2]=0;MAT[2][3]=0;
MAT[3][1]=0;MAT[3][2]=1;MAT[3][3]=0;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
SOL[i][j]=MAT[i][j];
explog(N-2);
printf("%d\n",(Z*SOL[1][1]) + (Y*SOL[1][2]) + (X*SOL[1][3]) );
}
}
int main()
{
deschidere();
citire();
return 0;
}