Cod sursa(job #2334038)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 2 februarie 2019 10:40:46
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
const int MOD = 666013;

std::ifstream in("iepuri.in");
std::ofstream out("iepuri.out");


void atrib(int a[3][3], int b[3][3]) {
	for (int i = 0; i < 3; ++i)
		for (int j = 0; j < 3; ++j)
			a[i][j] = b[i][j];
}

void produs(int a[3][3], int b[3][3]) {
	int c[3][3] = {0};
	for (int i = 0; i < 3; ++i)
		for (int j = 0; j < 3; ++j)
			for (int k = 0; k < 3; ++k)
				c[i][j] = (c[i][j] + 1LL * a[i][k] * b[k][j]) % MOD;
	atrib(a, c);
}

void putere(int a[3][3], int p) {
	int res[3][3];
	atrib(res, a);
	--p;

	for (; p; p >>= 1) {
		if (p & 1)
			produs(res, a);
		produs(a, a);
	}

	atrib(a, res);
}


int main() {
	int t;
	in >> t;
	while (t--) {
		int x, y, z, a, b, c, n;
		in >> x >> y >> z >> a >> b >> c >> n;
		int M[3][3]={{a, 1, 0},{b, 0, 1},{c, 0, 0}};
		putere(M, n - 2);
		out << (1LL * z * M[0][0] + 1LL * y * M[1][0] + 1LL * x * M[2][0]) % MOD << "\n";
	}
}