Pagini recente » Cod sursa (job #124085) | Cod sursa (job #796833) | Cod sursa (job #1628130) | Cod sursa (job #650055) | Cod sursa (job #263157)
Cod sursa(job #263157)
#include <stdio.h>
int i, j, k;
int **rez;
int **mat;
int **tmpRec;
void init()
{
rez = new int*[3];
mat = new int*[3];
tmpRec = new int*[3];
for (int i = 0 ; i < 3; i++)
{
rez[i] = new int[3];
mat[i] = new int[3];
tmpRec[i] = new int[3];
}
}
void Inmulteste(int **M1, int **M2)
{
for (i = 0 ; i < 3 ; i++)
for (j = 0 ; j < 3 ; j++)
rez[i][j] = 0;
for (i = 0 ; i < 3; i++)
for (j = 0 ; j < 3; j++)
for (k = 0 ; k < 3; k++)
rez[i][j] += M1[i][k]*M2[k][j];
}
int N, T, x, y, z, a, b, c;
void ProcedeuRecursiv(int lev, bool IsPar)
{
if (lev == 1)
{
}
else
{
ProcedeuRecursiv(lev / 2, lev % 2 == 0);
for (i = 0 ; i < 3; i++)
for (j = 0 ; j < 3 ; j++)
tmpRec[i][j] = mat[i][j];
Inmulteste(tmpRec, tmpRec);
for (i = 0 ; i < 3; i++)
for (j = 0 ; j < 3 ; j++)
tmpRec[i][j] = rez[i][j];
if (!IsPar)
Inmulteste(tmpRec, mat);
for (i = 0 ; i < 3; i++)
for (j = 0 ; j < 3 ; j++)
tmpRec[i][j] = rez[i][j];
}
}
void solve()
{
int aux = N;
mat[0][0] = 0;mat[0][1] = 0;mat[0][2] = c;
mat[1][0] = 1;mat[1][1] = 0;mat[1][2] = b;
mat[2][0] = 0;mat[2][1] = 1;mat[2][2] = a;
ProcedeuRecursiv(aux - 2, (aux - 2) % 2 == 0);
}
int main()
{
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
init();
scanf("%d", &T);
for (int i = 0 ; i < T; i++)
{
scanf("%d %d %d %d %d %d %d",&x,&y,&z,&a,&b,&c,&N);
if (N == 3)
printf("%d\n", (a*x + b*y + c*z));
else
{
solve();
printf("%d\n", (rez[0][2]*x + rez[1][2]*y + rez[2][2]*z));
}
}
}