Pagini recente » Cod sursa (job #1079174) | Cod sursa (job #2383853) | Cod sursa (job #1936250) | Cod sursa (job #2472676) | Cod sursa (job #2465157)
#include<fstream>
#include<string>
#include<array>
class Matrix {
public:
Matrix() {
for (long long i = 0; i < 3; ++i) {
for (long long j = 0; j < 3; ++j) {
m_arr[i][j] = 0;
}
}
}
void initMatrix(long long & a, long long & b, long long & 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 (long long k = 0; k < 3; ++k) {
for (long long i = 0; i < 3; ++i) {
for (long long 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 long long 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;
}
long long getResult(long long & x, long long & y, long long & 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<long long , 3>, 3> m_arr;
};
Matrix& compute(Matrix& m, long long && n) {
static Matrix sol;
sol.initIdentity();
for (long long i = 0; (1 << i) <= n; ++i) {
if ((1 << i) & n) {
sol = sol * m;
}
m = m * m;
}
return sol;
}
int main() {
std::ifstream in("iepuri.in");
std::ofstream out("iepuri.out");
Matrix m, res;
long long 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;
}