Cod sursa(job #3159122)

Utilizator average_disappointmentManolache Sebastian average_disappointment Data 20 octombrie 2023 18:59:44
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 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--;
	
	while (exp) {
		
		if ((exp & 1) != 0)
			matrix_multiplication(ans, base, A), copy_matrix(ans, A);

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

		exp >>= 1;
	}
}

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();
}