Cod sursa(job #1466728)

Utilizator AlexandraaaaMereu Alexandra Alexandraaaa Data 30 iulie 2015 00:07:58
Problema Iepuri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>
#define Mod 666013

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

	matr(long long a00 = 0, long long a01 = 0, long long a02 = 0,
		   long long a10 = 0, long long a11 = 0, long long a12 = 0,	
	     long long a20 = 0, long long a21 = 0, long long 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;
	}
};

matr inm(matr a, matr b) {
	int i, j, k;
	matr c;
	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] + a.Aa[k][i] * b.Aa[i][j]) % Mod;
	return c;
}

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

	int k, masc, A, B, C, X, Y, Z,t;
	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);

		masc = 1;
		while (masc <= k-2) {
			if (k-2 & masc) 
				s = inm(s, a);
			a = inm(a, a); 
			masc = masc << 1;
		}

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

	f.close();
	g.close();
	return 0;
}