Pagini recente » Cod sursa (job #2058189) | Cod sursa (job #482617) | Cod sursa (job #2931006) | Cod sursa (job #485790) | Cod sursa (job #3041372)
#include <bits/stdc++.h>
using namespace std;
// constanta modulo folosita in aceasta problema
#define MOD 666013
vector<vector<int>> identity_matrix() {
vector<vector<int>> matrix(3, vector<int>(3, 0));
matrix[0][0] = 1;
matrix[1][1] = 1;
matrix[2][2] = 1;
return matrix;
}
vector<vector<int>> mult_matrix(vector<vector<int>> A, vector<vector<int>> B) {
vector<vector<int>> matrix(3, vector<int>(3, 0));
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
matrix[i][j] = (matrix[i][j] + (A[i][k] * B[k][j]) % MOD) % MOD;
}
}
}
return matrix;
}
vector<vector<int>> exponentiate_matrix(vector<vector<int>> matrix, int exponent) {
vector<vector<int>> highest_power = matrix;
vector<vector<int>> result = identity_matrix();
while (exponent) {
if (exponent % 2 == 1) {
result = mult_matrix(result, highest_power);
}
exponent /= 2;
highest_power = mult_matrix(highest_power, highest_power);
}
return result;
}
vector<vector<int>> build_matrix(int A, int B, int C) {
vector<vector<int>> matrix(3, vector<int>(3, 0));
matrix[0][2] = C;
matrix[1][0] = 1;
matrix[1][2] = B;
matrix[2][1] = 1;
matrix[2][2] = A;
return matrix;
}
int main() {
int T;
int X, Y, Z, A, B, C, N;
int result;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
fin >> T;
for (int i = 0; i < T; i++) {
fin >> X >> Y >> Z >> A >> B >> C >> N;
vector<vector<int>> matrix = build_matrix(A, B, C);
vector<vector<int>> exp_matrix = exponentiate_matrix(matrix, N - 2);
result = ((X * exp_matrix[0][2]) % MOD + (Y * exp_matrix[1][2]) % MOD + (Z * exp_matrix[2][2]) % MOD) % MOD;
fout << result << "\n";
}
fin.close();
fout.close();
return 0;
}