Pagini recente » Cod sursa (job #130196) | Cod sursa (job #885512) | Cod sursa (job #2109472) | Cod sursa (job #1782538) | Cod sursa (job #2274688)
#include <iostream>
#include <fstream>
const int MOD = 666013;
struct Vector {
int v[3];
int first(){
return v[0];
}
};
struct Matrix {
int 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] + 1LL * 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] = (1LL * B.v[0] * m[0][i] + 1LL * B.v[1] * m[1][i] + 1LL * B.v[2] * m[2][i]) % MOD;
return result;
}
Matrix operator^(int p) {
Matrix A = *this;
Matrix result{{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}};
for (; p; p >>= 1) {
if (p & 1)
result = result * A;
A = A * A;
}
return result;
}
};
int main() {
std::ifstream in("iepuri.in");
std::ofstream out("iepuri.out");
int T;
int X, Y, Z, A, B, C, N;
in >> T;
for (int i = 1; i <= T; ++i) {
in >> X >> Y >> Z >> A >> B >> C >> N;
Matrix m{{{A, 1, 0},{B, 0, 1},{C, 0, 0}}};
Vector v{{Z, Y, X}};
N -= 2;
std::cout << ((m ^ N) * v).first() << "\n";
}
return 0;
}