Pagini recente » Cod sursa (job #214265) | Cod sursa (job #1309028) | Cod sursa (job #1649227) | Cod sursa (job #2822306) | Cod sursa (job #2274709)
#include <fstream>
typedef long long LL;
const LL MOD = 666013;
struct Vector {
LL v[3];
};
struct Matrix {
LL m[3][3];
Matrix operator*(Matrix B) {
Matrix A = *this;
Matrix product{0};
for (int i = 0; i < 3 ; ++i)
for (int j = 0; j < 3; ++j)
for (int k = 0; k < 3; ++k)
product.m[i][j] = (product.m[i][j] + A.m[i][k] * B.m[k][j]) % MOD;
return product;
}
Vector operator*(Vector B) {
Vector result{0};
for (int i = 0; i < 3; ++i)
result.v[i] = (B.v[0] * m[0][i] + B.v[1] * m[1][i] + B.v[2] * m[2][i]) % MOD;
return result;
}
Matrix operator^(int p) {
Matrix A = *this;
--p;
Matrix result = A;
for (; p; p >>= 1) {
if (p & 1)
result = result * A;
A = A * A;
}
return result;
}
};
LL solve(LL X, LL Y, LL Z, LL A, LL B, LL C, LL N) {
Matrix m{{{A, 1, 0},{B, 0, 1},{C, 0, 0}}};
Vector v{{Z, Y, X}};
N -= 2;
return ((m ^ N) * v).v[0];
}
int main() {
std::ifstream in("../iepuri.in");
std::ofstream out("../iepuri.out");
int T;
LL X, Y, Z, A, B, C, N;
in >> T;
for (int i = 1; i <= T; ++i) {
in >> X >> Y >> Z >> A >> B >> C >> N;
out << solve(X, Y, Z, A, B, C, N) << "\n";
}
return 0;
}