Cod sursa(job #1736996)

Utilizator theo.stoicanTheodor Stoican theo.stoican Data 3 august 2016 00:29:02
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstring>

using namespace std;

int mat[3][3];
int sol[3][3];

void mult (int a[][3], int b[][3], int c[][3])
{
	for (int i = 0; i <= 2; i++)
	{
		for (int j = 0; j <= 2; j++)
		{
			for (int k = 0; k <= 2; k++)
			{
				c[i][j] = (c[i][j] + a[i][k] * b[k][j] * 1LL) % 666013;
			}
		}
	}
}

void lg_power (int p)
{
	int aux[3][3];
	memset(sol, 0, sizeof(sol));
	sol[0][0] = 1;
	sol[1][1] = 1;
	sol[2][2] = 1;//matr unitate
	for (int i = 0; (1<<i) <= p; i++)
	{
		if ((1<<i) & p)
		{
			memset(aux, 0, sizeof(aux));
			mult (mat, sol, aux);
			memcpy (sol, aux, sizeof(aux));
		}

		memset (aux, 0, sizeof(aux));
		mult (mat, mat, aux);
		memcpy (mat, aux, sizeof(aux));

	}
}

int main()
{
	freopen ("iepuri.in", "r", stdin);
	freopen ("iepuri.out", "w", stdout);
	int x,y,z,a,b,c,n;
	int t;
	cin>>t;
	for (int i = 1; i <= t;i++)
	{
		cin>>x>>y>>z>>a>>b>>c>>n;
		mat[0][0] = a;
		mat[1][0] = b;
		mat[2][0] = c;
		mat[0][1] = 1;
		mat[1][1] = 0;
		mat[2][1] = 0;
		mat[0][2] = 0;
		mat[1][2] = 1;
		mat[2][2] = 0;
//cout<<"n: "<<n<<endl;
		lg_power(n-2);

		long long aux = (long long)sol[0][0] * z + (long long)sol[1][0] * y
		+ (long long) sol[2][0] * x;
		aux = aux % 666013;
		cout<<aux<<"\n";
	}
}