Cod sursa(job #2315724)

Utilizator DawlauAndrei Blahovici Dawlau Data 10 ianuarie 2019 14:41:13
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>

using namespace std;

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

const int Mod = 666013;

inline void matProd(int a[3][3], int b[3][3]) {

	int ans[3][3] = {0};

	for(int i = 0; i < 3; ++i)
		for(int j = 0; j < 3; ++j)
			for(int k = 0; k < 3; ++k)
				ans[i][j] = (ans[i][j] + 1LL * a[i][k] * b[k][j]) % Mod;

	for (int i = 0; i < 3; ++i)
		for (int j = 0; j < 3; ++j)
			a[i][j] = ans[i][j];
}

inline int solve(int X, int Y, int Z, int A, int B, int C, int N) {

	int rec[3][3] = {0, 0, C,
					 1, 0, B,
					 0, 1, A};
	int ans[3][3] = {1, 0, 0,
					 0, 1, 0,
					 0, 0, 1 };

	for (N -= 2; N; N >>= 1) {

		if (N & 1)
			matProd(ans, rec);
		matProd(rec, rec);
	}

	return  (1LL * X * ans[0][2] % Mod + 1LL * Y * ans[1][2] % Mod + 1LL * Z * ans[2][2] % Mod) % Mod;
}

int main() {

	int Q;
	fin >> Q;

	for (; Q; --Q) {

		int X, Y, Z, A, B, C, N;
		fin >> X >> Y >> Z >> A >> B >> C >> N;

		fout << solve(X, Y, Z, A, B, C, N) << '\n';
	}
}