Cod sursa(job #3181193)

Utilizator cosmin395dimofte cosmin cosmin395 Data 6 decembrie 2023 17:20:01
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
long long v[3][3], i, j, n, a[3][3];
void pmat(int nr)
{
	int k;
	while (nr)
	{
		if (nr % 2 == 1) // v=v*a
		{
			long long c[3][3] = { 0,0,0,0,0,0,0,0,0 };
			for (i = 0; i < 3; i++)
				for (j = 0; j < 3; j++)
					for (k = 0; k < 3; k++)
						c[i][j] += v[i][k] * a[k][j] % 666013;
			memcpy(v, c, sizeof(c));
			/*cout << "NR = " << nr << endl;
			for (i = 0; i < 3; i++) {
				for (j = 0; j < 3; j++)
					cout << v[i][j] << ' ';
				cout << endl;
			}*/
		}

		long long c[3][3] = { 0,0,0,0,0,0,0,0,0 };  //a=a*a
		for (i = 0; i < 3; i++)
			for (j = 0; j < 3; j++)
				for (k = 0; k < 3; k++)
					c[i][j] += a[i][k] * a[k][j] % 666013;
		memcpy(a, c, sizeof(c));
		nr /= 2;
	}
}
int main()
{
	int t;

	cin >> t;
	while (t--)
	{
		int x, y, z, a1, b, c;
		cin >> x >> y >> z >> a1 >> b >> c >> n;

		v[0][0] = 0;	v[0][1] = 0;	v[0][2] = c;
		v[1][0] = 1;	v[1][1] = 0;    v[1][2] = b;
		v[2][0] = 0;	v[2][1] = 1;	v[2][2] = a1;

		for (i = 0; i < 3; i++)
			for (j = 0; j < 3; j++)
				a[i][j] = v[i][j];

		pmat(n - 3);
		long long k = (x * v[0][2] + y * v[1][2] + z * v[2][2]) % 666013;
		cout << k << endl;

	}
}