Cod sursa(job #2989406)

Utilizator matthriscuMatt . matthriscu Data 6 martie 2023 16:20:01
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <bits/stdc++.h>
using namespace std;

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

typedef long long ll;

#define MOD 666013

int t, x, y, z, a, b, c, n;

vector<vector<ll>> mult(vector<vector<ll>>& a, vector<vector<ll>>& b) {
	vector<vector<ll>> ans(3, vector<ll>(3));

	ans[0][0] = (a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0]) % MOD;
	ans[0][1] = (a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1]) % MOD;
	ans[0][2] = (a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2]) % MOD;

	ans[1][0] = (a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0]) % MOD;
	ans[1][1] = (a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1]) % MOD;
	ans[1][2] = (a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2]) % MOD;

	ans[2][0] = (a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0]) % MOD;
	ans[2][1] = (a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1]) % MOD;
	ans[2][2] = (a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2]) % MOD;

	return ans;
}

vector<vector<ll>> pow(vector<vector<ll>>& a, int exp) {
	vector<vector<ll>> ans = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};

	while (exp) {
		if (exp & 1)
			ans = mult(ans, a);
		a = mult(a, a);
		exp /= 2;
	}

	return ans;
}

int main() {
	fin >> t;

	for (int i = 1; i <= t; ++i) {
		fin >> x >> y >> z >> a >> b >> c >> n;

		vector<vector<ll>> m = {{a, 1, 0}, {b, 0, 1}, {c, 0, 0}};

		m = pow(m, n - 2);

		fout << (z * m[0][0] + y * m[1][0] + x * m[2][0]) % MOD << '\n';
	}
}