Pagini recente » Cod sursa (job #3167291) | Cod sursa (job #493542) | Cod sursa (job #994312) | Cod sursa (job #688854) | Cod sursa (job #3264259)
#include <iostream>
#include <fstream>
#define MOD 666013
using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
int tests, x, y, z, a, b, c, day;
int initial[3];
struct matrix{
int x[3][3];
}name;
matrix multiply (matrix a, matrix b){
for (int i=0; i<3; ++i)
for (int j=0; j<3; ++j){
name.x[i][j] = 0;
for (int idx=0; idx<3; ++idx){
name.x[i][j] += 1LL * a.x[i][idx] * b.x[idx][j] % MOD;
}
}
return name;
}
matrix powerUp (matrix a, int power){
if (power == 1)
return a;
if (power % 2)
return multiply(powerUp(multiply(a, a), power/2), a);
return powerUp(multiply(a, a), power/2);
}
void finalStep (){
int sol = 0;
for (int i=0; i<3; ++i){
sol += 1LL * initial[i] * name.x[i][2] % MOD;
}
out << sol % MOD << '\n';
}
int main (){
in >> tests;
for (; tests; --tests){
in >> x >> y >> z >> a >> b >> c >> day;
matrix aux;
for (int i=0; i<3; ++i)
for (int j=0; j<3; ++j)
aux.x[i][j] = 0;
aux.x[1][0] = 1, aux.x[2][1] = 1;
aux.x[0][2] = c, aux.x[1][2] = b, aux.x[2][2] = a;
initial[0] = x, initial[1] = y, initial[2] = z;
if (day <= 2){
out << initial[day] << '\n';
continue;
}
powerUp(aux, day-2);
finalStep();
}
return 0;
}