Pagini recente » Cod sursa (job #82834) | Cod sursa (job #2281432) | Cod sursa (job #2003637) | Cod sursa (job #1065792) | Cod sursa (job #1465134)
#include <iostream>
#include <cstdio>
#define MOD 666013
using namespace std;
void mult(int a[3][3], int b[3][3], int rez[3][3])
{
int n = 3;
int aux[n][n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
aux[i][j] = 0;
for (int i = 0; i < n; i++) // a lines
for (int j = 0; j < n; j++) // b columns
for (int k = 0; k < n; k++) // b lines / a columns
aux[i][j] = (aux[i][j] + (b[k][j]*a[i][k])%MOD)%MOD;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
rez[i][j] = aux[i][j];
}
int t, x, y, z, a, b, c, day;
void printMat(int mat[3][3])
{
// debug
for (int i = 0; i < 3; i++, printf("\n"))
for (int j = 0; j < 3; j++)
printf("%d ", mat[i][j]);
}
void rise(int mat[3][3], int p)
{
int rez[3][3];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
rez[i][j] = i==j ? 1 : 0;
for (int i = 0; p>>i; i++)
{
if ((p>>i)&1)
mult(rez, mat, rez);
mult(mat, mat, mat);
}
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
mat[i][j] = rez[i][j];
}
void solve()
{
int m[3][3] = {{0, 0, c}, {1, 0, b}, {0, 1, a}};
rise(m, day-2);
int sol = x * m[0][2] + y * m[1][2] + z * m[2][2];
printf("%d\n", sol);
}
int main()
{
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
scanf("%d", &t);
for (int i = 0; i < t; i++)
{
scanf("%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &day);
solve();
}
return 0;
}