Pagini recente » Cod sursa (job #1612800) | Cod sursa (job #3272361) | Cod sursa (job #243813) | Cod sursa (job #832910) | Cod sursa (job #3276786)
#include <fstream>
using namespace std;
#define MOD 666013
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
struct Mat {
int mat[3][3];
};
const Mat nullMat = {
{
{1, 0, 0},
{0, 1, 0},
{0, 0, 1}
}
};
Mat prod(Mat a, Mat b) {
Mat ret;
ret.mat[0][0] = (1LL * a.mat[0][0] * b.mat[0][0] + 1LL * a.mat[0][1] * b.mat[1][0] + 1LL * a.mat[0][2] * b.mat[2][
0]) % MOD;
ret.mat[0][1] = (1LL * a.mat[0][0] * b.mat[0][1] + 1LL * a.mat[0][1] * b.mat[1][1] + 1LL * a.mat[0][2] * b.mat[2][
1]) % MOD;
ret.mat[0][2] = (1LL * a.mat[0][0] * b.mat[0][2] + 1LL * a.mat[0][1] * b.mat[1][2] + 1LL * a.mat[0][2] * b.mat[2][
2]) % MOD;
ret.mat[1][0] = (1LL * a.mat[1][0] * b.mat[0][0] + 1LL * a.mat[1][1] * b.mat[1][0] + 1LL * a.mat[1][2] * b.mat[2][
0]) % MOD;
ret.mat[1][1] = (1LL * a.mat[1][0] * b.mat[0][1] + 1LL * a.mat[1][1] * b.mat[1][1] + 1LL * a.mat[1][2] * b.mat[2][
1]) % MOD;
ret.mat[1][2] = (1LL * a.mat[1][0] * b.mat[0][2] + 1LL * a.mat[1][1] * b.mat[1][2] + 1LL * a.mat[1][2] * b.mat[2][
2]) % MOD;
ret.mat[2][0] = (1LL * a.mat[2][0] * b.mat[0][0] + 1LL * a.mat[2][1] * b.mat[1][0] + 1LL * a.mat[2][2] * b.mat[2][
0]) % MOD;
ret.mat[2][1] = (1LL * a.mat[2][0] * b.mat[0][1] + 1LL * a.mat[2][1] * b.mat[1][1] + 1LL * a.mat[2][2] * b.mat[2][
1]) % MOD;
ret.mat[2][2] = (1LL * a.mat[2][0] * b.mat[0][2] + 1LL * a.mat[2][1] * b.mat[1][2] + 1LL * a.mat[2][2] * b.mat[2][
2]) % MOD;
return ret;
}
Mat pwr(Mat mat, int n) {
if (!n)
return nullMat;
if (n % 2)
return prod(mat, pwr(prod(mat, mat), n / 2));
return pwr(prod(mat, mat), n / 2);
}
int main() {
int T;
cin >> T;
for (int i = 0; i < T; i++) {
int X, Y, Z, A, B, C, N;
cin >> X >> Y >> Z >> A >> B >> C >> N;
Mat initMat = {
{
{A, B, C},
{1, 0, 0},
{0, 1, 0}
}
};
Mat test = pwr(initMat, N - 2);
cout << test.mat[0][0] * Z + test.mat[0][1] * Y + test.mat[0][2] * X;
}
return 0;
}