Pagini recente » Cod sursa (job #2541432) | Cod sursa (job #3290405) | Cod sursa (job #1167147) | Monitorul de evaluare | Cod sursa (job #2225938)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MODULO 666013
int sol[3][3];
int x, y, z;
int a, b, c;
void multiply(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] = (c[i][j] + (1LL * a[i][k] * b[k][j]) % MODULO) % MODULO;
}
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
a[i][j] = c[i][j];
}
}
}
void n_day(int n) {
int mat[3][3] = { {a, b, c}, {1, 0, 0}, {0, 1, 0} };
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == j) {
sol[i][j] = 1;
}
else {
sol[i][j] = 0;
}
}
}
while (n > 0) {
if (n % 2 == 1) {
multiply(sol, mat);
}
multiply(mat, mat);
n /= 2;
}
}
int main() {
FILE* ip;
ip = fopen("iepuri.in", "r");
if (ip == NULL) {
perror("Cannot open input file");
return 1;
}
FILE* op;
op = fopen("iepuri.out", "w");
if (op == NULL) {
perror("Cannot open output file");
return 1;
}
int t;
int n;
fscanf(ip, "%d", &t);
for (int i = 0; i < t; i++) {
fscanf(ip, "%d%d%d", &x, &y, &z);
fscanf(ip, "%d%d%d", &a, &b, &c);
fscanf(ip, "%d", &n);
n_day(n - 2);
int res = ((sol[0][0] * z) % MODULO + (sol[0][1] * y) % MODULO + (sol[0][2] * x) % MODULO) % MODULO;
fprintf(op, "%d\n", res);
}
return 0;
}