Cod sursa(job #2047442)

Utilizator Teodor.mTeodor Marchitan Teodor.m Data 24 octombrie 2017 20:48:47
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("iepuri.in");
ofstream g("iepuri.out");

const int mod = 666013;

struct matrice {
	int a, b, c, d, e, f, g, h, i;

	matrice() { // 0 1 0
		a = 0;  // 0 0 1
		b = 1;  // 0 0 0
		c = 0;
		d = 0;
		e = 0;
		f = 1;
		g = 0;
		h = 0;
		i = 0;
	}
};
matrice M;

matrice produs(matrice A, matrice B)
{
	matrice C;
	C.a = (A.a * B.a) % mod + (A.b * B.d) % mod + (A.c * B.g) % mod;
	C.b = (A.a * B.b) % mod + (A.b * B.e) % mod + (A.c * B.h) % mod;
	C.c = (A.a * B.c) % mod + (A.b * B.f) % mod + (A.c * B.i) % mod;
	C.d = (A.d * B.a) % mod + (A.e * B.d) % mod + (A.f * B.g) % mod;
	C.e = (A.d * B.b) % mod + (A.e * B.e) % mod + (A.f * B.h) % mod;
	C.f = (A.d * B.c) % mod + (A.e * B.f) % mod + (A.f * B.i) % mod;
	C.g = (A.g * B.a) % mod + (A.h * B.d) % mod + (A.i * B.g) % mod;
	C.h = (A.g * B.b) % mod + (A.h * B.e) % mod + (A.i * B.h) % mod;
	C.i = (A.g * B.c) % mod + (A.h * B.f) % mod + (A.i * B.i) % mod;

	return C;
}

matrice putere(matrice A, long long n)
{
	if(n == 0)
		return M;
	if(n == 1)
		return A;
	if(n % 2 == 0) {
		return putere(produs(A, A), n / 2);
	}
	else {
		return produs(A, putere(produs(A, A), n / 2));
	}
}

int main()
{
	int T;
	f >> T;

	for(int i = 1; i <= T; ++i) {
		int x, y, z, a, b ,c ,n;

		f >> x >> y >> z >> a >> b >> c >> n;

		M.g = c;
		M.h = b;
		M.i = a;
		
		matrice sol = putere(M, n - 2);

		long long ans = sol.g * x + sol.h * y + sol.i * z;
		
		g << ans << '\n';

	}
	return 0;
}