Cod sursa(job #3121283)

Utilizator game_difficultyCalin Crangus game_difficulty Data 11 aprilie 2023 17:24:38
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <fstream>
#define int long long

using namespace std;

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

const int MOD = 666013;
const int N = 3;
int mat[N][N] = { {0, 1}, {1, 1} };
int mat2[N][N] = { {1, 0, 0}, {0, 1, 0}, {0, 0, 1} };
int aux[N][N];

void multiply(int m1[][N], int m2[][N], int c[][N]) {
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			c[i][j] = 0;
		}
	}
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			for (int k = 0; k < N; k++) {
				c[i][j] += m1[i][k] * m2[k][j] % MOD;
				c[i][j] %= MOD;
			}
		}
	}
}

void copyy(int m1[][N], int m2[][N]) {
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			m1[i][j] = m2[i][j];
		}
	}
}

void lgput(int e) {
	while (e) {
		if (e & 1) {
			multiply(mat, mat2, aux);
			copyy(mat2, aux);
		}
		multiply(mat, mat, aux);
		copyy(mat, aux);
		e >>= 1;
	}
}

int32_t main() {
	int t;
	cin >> t;
	while (t--) {
		int x, y, z, a, b, c, n;
		cin >> x >> y >> z >> a >> b >> c >> n;
		mat[0][0] = 0; mat[0][1] = 0; mat[0][2] = c;
		mat[1][0] = 1; mat[1][1] = 0; mat[1][2] = b;
		mat[2][0] = 0; mat[2][1] = 1; mat[2][2] = a;
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				mat2[i][j] = 0;
			}
		}
		for (int i = 0; i < N; i++) mat2[i][i] = 1;
		lgput(n);
		/*for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				cout << mat2[i][j] << ' ';
			}
			cout << '\n';
		}*/
		cout << (((x * mat2[0][0]) % MOD + (y * mat2[1][0]) % MOD) % MOD + (z * mat2[2][0]) % MOD) % MOD << '\n';
	}
	return 0;
}


//			   A  (A^2 + B)     (A ^ 3 + 2AB + C)
//Z Y X	 x	   B  (AB + C)   (A ^ 2 * B + AC + B ^ 2)
//			   C     AC         (A ^ 2 * C + BC)
//
//f[i] = A * f[i - 1] + B * f[i - 2] + C * f[i - 3]
//f[i + 1] = 
//
//X, Y, Z, A * Z + B * Y + C * X, (A^2 + B) * Z + (AB + C) * Y + AC * X
//(A^3 + 2AB + C) * Z + (A^2 * B + AC + B^2) * Y + (A^2 * C + BC) * X