Cod sursa(job #3352783)

Utilizator Alexutu008Ionita Alexandru-Dumitru Alexutu008 Data 1 mai 2026 14:28:44
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <bits/stdc++.h>

using namespace std;

// [x, y, x] @ ([[0, 0, C], [1, 0, B], [0, 1, A]] ** k)
// vars @ d

const int mod = 666013;
long long vars[3], rez[3][3], d[3][3], ans[3][3];
long long tc, x, y, z, a, b, c, k;

void dxB(long long B[3][3]) {
	for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) rez[i][j] = 0;

	for (int i = 0; i < 3; ++i) {
		for (int j = 0; j < 3; ++j) {
			for (int k = 0; k < 3; ++k) {
				rez[i][j] += d[i][k] * B[k][j];
				rez[i][j] %= mod;
			}
		}
	}
}

void d_la_k() {
	for (long long bit = 1; bit <= k; bit <<= 1) {
		if (bit & k) {
			dxB(ans);
			for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) ans[i][j] = rez[i][j];
		}

		dxB(d);
		for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) d[i][j] = rez[i][j];
	}
}

void solve() {
	cin >> x >> y >> z >> a >> b >> c >> k;
	k -= 2; // k >= 3

	// init
	for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) ans[i][j] = 0;
	ans[0][0] = ans[1][1] = ans[2][2] = 1;
	d[0][0] = 0; d[0][1] = 0; d[0][2] = c; d[1][0] = 1; d[1][1] = 0; d[1][2] = b; d[2][0] = 0; d[2][1] = 1; d[2][2] = a;

	// compute
	d_la_k();
	long long out = 0;
	out += (x * ans[0][2]); out %= mod;
	out += (y * ans[1][2]); out %= mod;
	out += (z * ans[2][2]); out %= mod;

	cout << out << '\n';
}

int main() {
	freopen("iepuri.in", "r", stdin);
	freopen("iepuri.out", "w", stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> tc;
	while (tc--) {
		solve();
	}

	return 0;
}