Pagini recente » Cod sursa (job #120791) | Cod sursa (job #643876) | Cod sursa (job #2255238) | Cod sursa (job #2114764) | Cod sursa (job #2018333)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
typedef long long mat[3][3];
long long A, B, C, x, y, z, n, s;
void inm(mat a, mat b, mat c) {
int i, j, k;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++) {
c[i][j] = 0;
for (k = 0; k < 3; k++)
c[i][j] += a[i][k] * b[k][j];
}
}
void copii(mat a, mat b) {
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
a[i][j] = b[i][j];
}
long long rid() {
mat sol = {0}, a = {0}, tmp = {0};
sol[0][0] = sol[1][1] = sol[2][2] = 1;
a[0][1] = a[1][2] = 1, a[2][0] = C, a[2][1] = B, a[2][2] = A;
n -= 2;
while (n) {
if (n&1) {
inm(sol, a, tmp);
copii(sol, tmp);
}
inm(a, a, tmp);
copii(a, tmp);
n >>= 1;
}
return x*sol[2][0] + y*sol[2][1] + z*sol[2][2];
}
int main() {
f >> s;
while (s--) {
f >> x >> y >> z >> A >> B >> C >> n;
g << rid() << '\n';
}
return 0;
}