Cod sursa(job #3159112)

Utilizator average_disappointmentManolache Sebastian average_disappointment Data 20 octombrie 2023 18:52:54
Problema Iepuri Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>

using namespace std;

ifstream cin("iepuri.in");
ofstream cout("iepuri.out");

const int dim = 3, mod = 666013;

void copy_matrix(int A[dim][dim], int B[dim][dim]) {

	for (int i = 0; i < dim; i++)
		for (int j = 0; j < dim; j++)
			A[i][j] = B[i][j];
}

void matrix_multiplication(int A[dim][dim], int B[dim][dim], int rez[dim][dim]) {

	for (int i = 0; i < dim; i++)
		for (int j = 0; j < dim; j++)
			rez[i][j] = 0;

	for (int i = 0; i < dim; i++)
		for (int j = 0; j < dim; j++)
			for (int k = 0; k < dim; k++)
				rez[i][j] = (rez[i][j] + 1ll * A[i][k] * B[k][j]) % mod;
}

void fast_exponentiation(int A[dim][dim], int ans[dim][dim], int exp) {

	int base[dim][dim];
	copy_matrix(base, A), copy_matrix(ans, A);

	exp--;

	for (int pow = 1; pow <= exp; pow <<= 1) {

		if ((exp & pow) != 0)
			matrix_multiplication(ans, base, A), copy_matrix(ans, A);

		matrix_multiplication(base, base, A), copy_matrix(base, A);
	}
}

void solve() {

	int x, y, z, a, b, c, n;
	cin >> x >> y >> z >> a >> b >> c >> n;

	int A[dim][dim] = { {a, b, c}, {1, 0, 0}, {0, 1, 0} }, X[] = { z, y, x }, ans[dim][dim];

	fast_exponentiation(A, ans, n - dim + 1);

	int xn = 0;
	for (int k = 0; k < dim; k++)
		xn = (xn + 1ll * ans[0][k] * X[k]) % mod;

	cout << xn << "\n";
}

int main() {

	int t;
	cin >> t;

	while (t--)
		solve();
}