Cod sursa(job #3229673)

Utilizator luc3lexaAlexandrescu Luca luc3lexa Data 17 mai 2024 00:41:19
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

const int MOD = 666013;
long long int test_cases,x,y,z,A,B,C,n;
struct mat33{
	long long int m00,m01,m02;
	long long int m10,m11,m12;
	long long int m20,m21,m22;
};
struct mat31{
	long long int m00,m10,m20;
};
mat33 produs3(mat33 a ,mat33 b){
	mat33 c;
	c.m00 = ((a.m00*b.m00)%MOD + (a.m01*b.m10)%MOD + (a.m02*b.m20)%MOD)%MOD;
	c.m01 = ((a.m00*b.m01)%MOD + (a.m01*b.m11)%MOD + (a.m02*b.m21)%MOD)%MOD;
	c.m02 = ((a.m00*b.m02)%MOD + (a.m01*b.m12)%MOD + (a.m02*b.m22)%MOD)%MOD;
	c.m10 = ((a.m10*b.m00)%MOD + (a.m11*b.m10)%MOD + (a.m12*b.m20)%MOD)%MOD;
	c.m11 = ((a.m10*b.m01)%MOD + (a.m11*b.m11)%MOD + (a.m12*b.m21)%MOD)%MOD;
	c.m12 = ((a.m10*b.m02)%MOD + (a.m11*b.m12)%MOD + (a.m12*b.m22)%MOD)%MOD;
	c.m20 = ((a.m20*b.m00)%MOD + (a.m21*b.m10)%MOD + (a.m22*b.m20)%MOD)%MOD;
	c.m21 = ((a.m20*b.m01)%MOD + (a.m21*b.m11)%MOD + (a.m22*b.m21)%MOD)%MOD;
	c.m22 = ((a.m20*b.m02)%MOD + (a.m21*b.m12)%MOD + (a.m22*b.m22)%MOD)%MOD;
    return c;
};
mat31 produs1(mat33 a,mat31 b){
	mat31 c;
	c.m00 = ((a.m00*b.m00)%MOD + (a.m01*b.m10)%MOD + (a.m02*b.m20)%MOD)%MOD;
	c.m10 = ((a.m10*b.m00)%MOD + (a.m11*b.m10)%MOD + (a.m12*b.m20)%MOD)%MOD;
	c.m20 = ((a.m20*b.m00)%MOD + (a.m21*b.m10)%MOD + (a.m22*b.m20)%MOD)%MOD;
    return c;
};
mat33 fast_pow(mat33 a,int n){
	mat33 p = a;
	n--;
	while(n){
		if(n%2 == 1){
			p = produs3(p,a);
		};
		a = produs3(a,a);
		n/=2;
	};
	return p;
}
void solve(){
	fin >> x >> y >> z >> A >> B >> C >> n;
    mat33 matrice1 = {A,B,C,1,0,0,0,1,0};	
    mat31 matrice2 = {z,y,x};
    mat31 ans = produs1(fast_pow(matrice1,n-2),matrice2);
    fout << ans.m00 << '\n';
}
int main(){
	fin >> test_cases;
	while(test_cases--){
		solve();
	};
	return 0;
}