Pagini recente » Statistici Cristian Andrei (Vecernia) | Concursuri Virtuale | Concursuri Virtuale | Istoria paginii utilizator/adamalexandru4 | Cod sursa (job #1348049)
#include <stdio.h>
FILE *fin, *fout;
int t, x, y, z, a, b, c, n, rasp;
struct mat
{
int v[3][3];
} r, w, null;
mat inmultire(mat a1, mat a2)
{
mat ans;
ans.v[0][0] = a1.v[0][0]*a2.v[0][0] + a1.v[0][1]*a2.v[1][0] + a1.v[0][2]*a2.v[2][0];
ans.v[0][1] = a1.v[0][0]*a2.v[0][1] + a1.v[0][1]*a2.v[1][1] + a1.v[0][2]*a2.v[2][1];
ans.v[0][2] = a1.v[0][0]*a2.v[0][2] + a1.v[0][1]*a2.v[1][2] + a1.v[0][2]*a2.v[2][2];
ans.v[1][0] = a1.v[1][0]*a2.v[0][0] + a1.v[1][1]*a2.v[1][0] + a1.v[1][2]*a2.v[2][0];
ans.v[1][1] = a1.v[1][0]*a2.v[0][1] + a1.v[1][1]*a2.v[1][1] + a1.v[1][2]*a2.v[2][1];
ans.v[1][2] = a1.v[1][0]*a2.v[0][2] + a1.v[1][1]*a2.v[1][2] + a1.v[1][2]*a2.v[2][2];
ans.v[2][0] = a1.v[2][0]*a2.v[0][0] + a1.v[2][1]*a2.v[1][0] + a1.v[2][2]*a2.v[2][0];
ans.v[2][1] = a1.v[2][0]*a2.v[0][1] + a1.v[2][1]*a2.v[1][1] + a1.v[2][2]*a2.v[2][1];
ans.v[2][2] = a1.v[2][0]*a2.v[0][2] + a1.v[2][1]*a2.v[1][2] + a1.v[2][2]*a2.v[2][2];
return ans;
}
mat power(mat a1, int a2)
{
if(a2 == 0) return null;
if(a2 == 1) return a1;
mat temp = power(a1, a2/2);
return inmultire(inmultire(temp, temp), power(a1, a2%2));
}
int main()
{
fin =freopen("iepuri.in", "r", stdin);
fout = freopen("iepuri.out", "w", stdout);
scanf("%d", &t);
null.v[0][0] = 1;
null.v[0][1] = 0;
null.v[0][2] = 0;
null.v[1][0] = 0;
null.v[1][1] = 1;
null.v[1][2] = 0;
null.v[2][0] = 0;
null.v[2][1] = 0;
null.v[2][2] = 1;
for(int i = 0; i< t; i++)
{
scanf("%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &n);
r.v[0][0] = 0;
r.v[0][1] = 0;
r.v[0][2] = c;
r.v[1][0] = 1;
r.v[1][1] = 0;
r.v[1][2] = b;
r.v[2][0] = 0;
r.v[2][1] = 1;
r.v[2][2] = a;
w = power(r, n-2);
rasp = x*w.v[0][2] + y*w.v[1][2] + z*w.v[2][2];
printf("%d\n", rasp);
}
fclose(fin);
fclose(fout);
return 0;
}