Cod sursa(job #3030689)

Utilizator laurentiu.maticaMatica Laurentiu-Andrei laurentiu.matica Data 17 martie 2023 20:13:47
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include <vector>
using namespace std;
#define MOD 666013
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
vector<vector<int>> z(3,vector<int>(3));
vector<vector<int>> masca(3, vector<int>(3));
vector<vector<int>> xyz(3, vector<int>(3));
int A, B, C;
int X, Y, Z;
int n;
void mount()
{
	masca[0][0] = z[0][0] = A;
	masca[0][1] = z[0][1] = B;
	masca[0][2] = z[0][2] = C;
	masca[1][0] = z[1][0] = 1;
	masca[1][1] = z[1][1] = 0;
	masca[1][2] = z[1][2] = 0;
	masca[2][0] = z[2][0] = 0;
	masca[2][1] = z[2][1] = 1;
	masca[2][2] = z[2][2] = 0;
	xyz[0][0] = Z;
	xyz[1][0] = Y;
	xyz[2][0] = X;
	xyz[0][1] = 0;
	xyz[1][1] = 0;
	xyz[2][1] = 0;
	xyz[0][2] = 0;
	xyz[1][2] = 0;
	xyz[2][2] = 0;
}
vector<vector<int>> mult(vector<vector<int>> a, vector<vector<int>> b)
{
	vector<vector<int>> c(3,vector<int>(3));
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			c[i][j] = 0;
			for (int k = 0; k < 3; k++)
				c[i][j] = (c[i][j] + a[i][k] * b[k][j]) % MOD;
		}
	}
	return c;
}
vector<vector<int>> exp(int n, vector<vector<int>> a)
{
	if (n == 1)
		return masca;
	if (n % 2 == 1)
		return mult(a, exp(n - 1, a));
	vector<vector<int>> P = exp(n / 2, a);
	return mult(P, P);
}
int main()
{
	int T;
	cin >> T;
	for (int asap = 0; asap < T; asap++)
	{
		cin >> X >> Y >> Z >> A >> B >> C >> n;
		mount();
		vector<vector<int>> fin(3, vector<int>(3));
		vector<vector<int>> nebuniaLuSalam(3, vector<int>(3));
		nebuniaLuSalam = exp(n - 2, z);
		fin = mult(nebuniaLuSalam, xyz);
		cout << fin[0][0] << '\n';
	}
	return 0;
}