Cod sursa(job #1727953)

Utilizator vladc096Vlad Cincean vladc096 Data 11 iulie 2016 22:26:57
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <vector>

int X, Y, Z, A, B, C;

using namespace std;

inline void multiplyMatrices(vector<vector<int>>& a, vector<vector<int>> b) {
	vector<vector<int>> c{ {0,0,0},{0,0,0},{0,0,0} };
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			for (int k = 0; k < 3; k++) {
				c[i][j] += ((a[i][k] * b[k][j]) % 666013);
			}
			c[i][j] %= 666013;
		}
	}
	a = c;
}

inline vector<vector<int>> characteristicMatrix(long long p) {
	vector<vector<int>> M{ {0,1,0},{0,0,1},{A,B,C} }; // M
	vector<vector<int>> r{ {1,0,0},{0,1,0},{0,0,1} }; // I3
	while (p > 0) {
		if (p % 2 == 1) {
			multiplyMatrices(r, M);
			--p;
		}
		multiplyMatrices(M, M);
		p /= 2;
	}
	return r;
}

int main() {
	int T;
	long long N;
	ifstream f("iepuri.in");
	f >> T;
	ofstream g("iepuri.out");
	for (int i = 0; i < T; i++) {
		f >> X >> Y >> Z >> A >> B >> C >> N;
		vector<vector<int>> M = characteristicMatrix(N - 2);
		g << ((M[2][0] * X + M[2][1] * Y + M[2][2] * Z) % 666013) << "\n";
	}
	f.close();
	g.close();

	return 0;
}