Cod sursa(job #2262122)

Utilizator flibiaVisanu Cristian flibia Data 16 octombrie 2018 23:29:48
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>
#define ll long long
#define mod 666013

using namespace std;

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

int t;
ll x, y, z, a, b, c, k, mat[3][3];

void mul(ll a[3][3], ll b[3][3]) {
	ll p[3][3];
	memset(p, 0, sizeof(p));
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 3; j++)
			for (int k = 0; k < 3; k++) {
				p[i][j] += a[i][k] * b[k][j];
				p[i][j] %= mod;
			}
	memcpy(a, p, sizeof(p));
}

ll lg(ll k) {
	k -= 2;
	memset(mat, 0, sizeof(mat));
	mat[1][0] = mat[2][1] = 1;
	mat[0][2] = c;
	mat[1][2] = b;
	mat[2][2] = a;
	ll aux[3][3];
	memset(aux, 0, sizeof(aux));
	bool f = 0;
	for (ll i = 0; i < 31; i++) {
		if (i) 
			mul(mat, mat);
		if (k & (1 << i)) {
			if (!f) {
				memcpy(aux, mat, sizeof(mat));
				f = 1;
			} else mul(aux, mat);
		}
	}
	return (x * aux[0][2] + y * aux[1][2] + z * aux[2][2]) % mod;
}

int main(){
	in >> t;
	while (t--) {
		in >> x >> y >> z >> a >> b >> c >> k;
		out << lg(k) << '\n';
	}
	return 0;
}