Cod sursa(job #3337749)

Utilizator mirceapgabpopovici mircea mirceapgab Data 29 ianuarie 2026 19:08:29
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
long mod = 666013;
void mult(int a[3][3], int b[3][3]) {
	int c[3][3];
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			c[i][j] = 0;
			for (int k = 0; k < 3; k++) {
				c[i][j] += (1LL * a[i][k] * b[k][j]) % mod;
			}
		}
	}

	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			a[i][j] = c[i][j];
		}
	}
}

void exp(int base[3][3], int N, int ans[3][3]) {
	while (N) {
		if (N % 2 == 0) {
			mult(base, base);
			N /= 2;
		} else {
			mult(ans, base);
			N--;
		}
	}
}
int solve(int mat[3][3], int x, int y, int z, int N) {
	int res[3][3];
     for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			res[i][j] = (i == j);
		}
	}
    exp(mat, N - 2, res);
	return(((1LL*x*res[0][2])%mod+(1LL*y*res[1][2])%mod)%mod+(1LL*z*res[2][2])%mod)%mod;
}

int main() {
	int n;
	in>>n;

	int mat[3][3];
	for (int i=0;i<n;i++) {
		int x,y,z,a,b,c,N;
		in>>x>>y>>z>>a>>b>>c>>N;
		mat[0][0]=0;
		mat[0][1]=0;
		mat[1][0]=1;
		mat[1][1]=0;
		mat[2][0]=0;
		mat[2][1]=1;
		mat[0][2]=c;
		mat[1][2]=b;
		mat[2][2]=a;

		out<<solve(mat,x,y,z,N)<<"\n";
	}



	return 0;
}