Pagini recente » Cod sursa (job #3332090) | Cod sursa (job #335503) | Cod sursa (job #3354884) | Monitorul de evaluare | Cod sursa (job #3352191)
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
struct Matrice {
long long mat[3][3];
// Constructor pentru a initializa cu 0
Matrice() {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
mat[i][j] = 0;
}
};
Matrice multiply(Matrice A, Matrice B) {
Matrice C;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
C.mat[i][j] = (C.mat[i][j] + A.mat[i][k] * B.mat[k][j]) % 666013;
// Inmultirea matricilor
}
}
}
return C;
}
Matrice putere(Matrice M, int p) {
Matrice rez; // Ceea ce este un "element neutru", Matricea Identitate !!!!
rez.mat[0][0] = 1; rez.mat[1][1] = 1; rez.mat[2][2] = 1;
while (p > 0) {
if (p % 2 == 1) {
rez = multiply(rez, M);
}
M = multiply(M, M);
p /= 2;
}
return rez;
}
int main() {
int t;
fin>>t;
for(int i=0;i<t;i++) {
long long x, y, z, a, b, c, n;
fin>>x>>y>>z>>a>>b>>c >> n;
Matrice start; // Coef in matrice 3x3
start.mat[0][0] = a % 666013; start.mat[0][1] = b % 666013; start.mat[0][2] = c % 666013; // Ziua curenta
start.mat[1][0] = 1; start.mat[1][1] = 0; start.mat[1][2] = 0; // Ziua trecuta
start.mat[2][0] = 0; start.mat[2][1] = 1; start.mat[2][2] = 0; // Ziua n-2
// Matricea start trebuie ridicata la puterea n - 2, pentru ca plecam de la ziua 2
start = putere(start, n - 2); // O sa fie coeficientii in matrice
long long raspuns = (start.mat[0][0] * z + start.mat[0][1] * y + start.mat[0][2] * x) % 666013;
fout<<raspuns << '\n';
}
}