Cod sursa(job #1467206)

Utilizator AlexandraaaaMereu Alexandra Alexandraaaa Data 3 august 2015 00:16:05
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <cstring>
#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) {
	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] + (1LL * a.Aa[k][i] * b.Aa[i][j])) % Mod;
	memcpy(a.Aa, c.Aa, sizeof(c));
}

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

	int k, A, B, C, X, Y, Z, t;
	unsigned int masc;
	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;
		k = k - 2;
		while (masc <= k) {
			if (k & masc){
				inm(s, a);
			}
			inm(a, a);
			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;
}