Cod sursa(job #2640822)

Utilizator AndreiPaval03Andrei Paval AndreiPaval03 Data 8 august 2020 14:31:02
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

#define MOD 666013

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

void matProduct(long long A[4][4], long long B[4][4], long long C[4][4])
{
	long long rez[4][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};

	for (int i = 1; i <= 3; ++i)
		for (int j = 1; j <= 3; ++j)
			for (int k = 1; k <= 3; ++k)
				rez[i][j] = (rez[i][j] + (A[i][k] * B[k][j]) % MOD) % MOD;

	for (int i = 1; i <= 3; ++i)
		for (int j = 1; j <= 3; ++j)
			C[i][j] = rez[i][j];
}

void matExponentiation(int n, long long mat[4][4])
{
	long long auxMat[4][4] = {{0, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}};
    	
	while (n > 1)
	{
		if (n % 2)
			matProduct(mat, auxMat, auxMat);
		matProduct(mat, mat, mat);
		n >>= 1;
	}

	matProduct(mat, auxMat, mat);
}

int main()
{
    int n;
    long long mat[4][4]; 
    int x, y, z;
    int numTests;

    cin >> numTests;
    while (numTests--)
    {
    	fin >> x >> y >> z >> mat[1][1] >> mat[1][2] >> mat[1][3] >> n;
    	mat[2][1] = mat[3][2] = 1;
    	mat[2][2] = mat[2][3] = mat[3][1] = mat[3][3] = 0;

    	matExponentiation(n - 2, mat);

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

	return 0;
}