Pagini recente » Cod sursa (job #1060083) | Cod sursa (job #1888240) | Cod sursa (job #1726778) | Cod sursa (job #351076) | Cod sursa (job #2465155)
#include<fstream>
#include<string>
#include<array>
class Matrix {
public:
Matrix() {
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
m_arr[i][j] = 0;
}
}
}
void initMatrix(int& a, int& b, int& c) {
m_arr[0][0] = a;
m_arr[0][1] = b;
m_arr[0][2] = c;
m_arr[1][0] = m_arr[2][1] = 1;
m_arr[1][1] = m_arr[1][2] = m_arr[2][0] = m_arr[2][2] = 0;
}
Matrix operator *(const Matrix& m) {
Matrix res;
for (int k = 0; k < 3; ++k) {
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
res.m_arr[i][j] += (m_arr[i][k] * m.m_arr[k][j]) % MODULO;
res.m_arr[i][j] %= MODULO;
}
}
}
return std::move(res);
}
const static int MODULO = 666013;
void initIdentity() {
m_arr[0][0] = m_arr[1][1] = m_arr[2][2] = 1;
m_arr[0][1] = m_arr[0][2] = m_arr[1][0] = m_arr[1][2] = m_arr[2][0] = m_arr[2][1] = 0;
}
int getResult(int& x, int& y, int& z) {
return ((m_arr[0][0] * z) % MODULO + (m_arr[0][1] * y) % MODULO + (m_arr[0][2] * x) % MODULO) % MODULO;
}
private:
std::array<std::array<int, 3>, 3> m_arr;
};
Matrix compute(Matrix& m, int&& n) {
Matrix sol;
sol.initIdentity();
for (int i = 0; (1 << i) <= n; ++i) {
if ((1 << i) & n) {
sol = sol * m;
}
m = m * m;
}
return std::move(sol);
}
int main() {
std::ifstream in("iepuri.in");
std::ofstream out("iepuri.out");
Matrix m, res;
int t, x, y, z, a, b, c, n;
in >> t;
while (t--) {
in >> x >> y >> z >> a >> b >> c >> n;
m.initMatrix(a, b, c);
res = compute(m, n - 2);
out << res.getResult(x, y, z) << std::endl;
}
out.close();
return 0;
}