Pagini recente » Cod sursa (job #2047274) | Cod sursa (job #1401787) | Cod sursa (job #1332754) | Cod sursa (job #1579174) | Cod sursa (job #935132)
Cod sursa(job #935132)
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const int DIM = 5;
const int MOD = 666013;
int A, B, C, X, Y, Z, N;
void imat(int mat1[DIM][DIM], int mat2[DIM][DIM]) {
int newMat[DIM][DIM];
memset(newMat, 0, sizeof(newMat));
for (int i = 1; i <= 3; ++i)
for (int j = 1; j <= 3; ++j)
for (int k = 1; k <= 3; ++k)
newMat[i][j] = (newMat[i][j] + mat1[i][k] * mat2[k][j]) % MOD;
memcpy(mat1, newMat, sizeof(newMat));
}
void pow(int mat[DIM][DIM], int p) {
int mr[DIM][DIM];
memcpy(mr, mat, sizeof(mr));
for (int i = 0; (1 << i) <= p; ++i) {
if (p & (1 << i))
imat(mat, mr);
imat(mr, mr);
}
}
int main() {
int T;
fin >> T;
for (; T; --T) {
fin >> X >> Y >> Z >> A >> B >> C >> N;
int Mi[5][5], Mp[5][5];
memset(Mi, 0, sizeof(Mi));
memset(Mp, 0, sizeof(Mp));
Mi[1][1] = X;
Mi[1][2] = Y;
Mi[1][3] = Z;
Mp[1][3] = C;
Mp[2][3] = B;
Mp[3][3] = A;
Mp[2][1] = 1; Mp[3][2] = 1;
pow(Mp, N - 3);
imat(Mi, Mp);
fout << Mi[1][3] << "\n";
}
return 0;
}