Cod sursa(job #1467094)

Utilizator AlexandraaaaMereu Alexandra Alexandraaaa Data 2 august 2015 18:58:14
Problema Iepuri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <fstream>
#define Mod 666013

using namespace std;
struct matr {
	int Aa[3][3];

	matr(int a00 = 0, int a01 = 0, int a02 = 0,
		   int a10 = 0, int a11 = 0, int a12 = 0,
		   int a20 = 0, int a21 = 0, int a22 = 0) {
		Aa[0][0] = a00;	Aa[0][1] = a01;	Aa[0][2] = a02;
		Aa[1][0] = a10;	Aa[1][1] = a11;	Aa[1][2] = a12;
		Aa[2][0] = a20;	Aa[2][1] = a21;	Aa[2][2] = a22;
	}
};

void inm(matr &a, matr &b, matr &c) {
	int i, j, k;
	for (k = 0; k < 3; ++k)
		for (j = 0; j < 3; ++j)
			for (i = 0; i < 3; ++i)
				c.Aa[k][j] = (c.Aa[k][j] + (1LL * a.Aa[k][i] * b.Aa[i][j])) % Mod;
}

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

	int k, masc, A, B, C, X, Y, Z, t, i, j;
	f >> t;
	while (t) {
		f >> X >> Y >> Z >> A >> B >> C >> k;
		matr a(0, 0, C,
					 1, 0, B,
				   0, 1, A),
				 s(1, 0, 0,
					 0, 1, 0,
					 0, 0, 1),
				 c;
		masc = 1;
		k = k - 2;
		while (masc <= k) {
			if (k & masc){
				inm(s, a, c);
				s = c; 
				for (i = 0; i < 3; ++i)
					for (j = 0; j < 3; ++j)
						c.Aa[i][j] = 0;
			}
			inm(a, a, c);
			a = c; 
			for (i = 0; i < 3; ++i)
				for (j = 0; j < 3; ++j)
					c.Aa[i][j] = 0;
			masc = masc << 1;
		}

		int b = ((1LL * s.Aa[0][2] * X) +
			(1LL * s.Aa[1][2] * Y) + 
			(1LL * s.Aa[2][2] * Z)) % Mod;
		g << b << "\n";
		t--;
	}
	f.close();
	g.close();
	return 0;
}