Pagini recente » Cod sursa (job #103612) | Cod sursa (job #3319376) | Cod sursa (job #1179772) | Cod sursa (job #3349292) | Cod sursa (job #3322887)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const int mod = 666013;
void ridicamat(int a[3][3], int p, int nr);
void inmultiremat(int a[3][3], int b[3][3], int nr);
int main()
{
int teste;
fin>>teste;
while(teste--)
{
int x, y, z, a, b, c, n;
fin>>x>>y>>z>>a>>b>>c>>n;
int mat[3][3] = {{0,0, c}, {1, 0, b}, {0, 1, a}}, start[3][3];
start[0][0] = x; start[0][1] = y; start[0][2] = z;
ridicamat(mat, n-2, 3);
inmultiremat(start, mat, 3);
fout<<start[0][2]<<"\n";
}
return 0;
}
void ridicamat(int a[3][3], int p, int nr)
{
int rez[3][3] = {0};
for(int i = 0; i < nr; ++i)
rez[i][i] = 1;
while(p > 0)
{
if(p % 2 == 1)
inmultiremat(rez, a, nr);
inmultiremat(a, a, nr);
p /= 2;
}
for(int i = 0; i < nr; ++i)
{
for(int j = 0; j < nr; ++j)
a[i][j] = rez[i][j];
}
}
void inmultiremat(int a[3][3], int b[3][3], int nr)
{
int aux[3][3] = {0};
for(int i = 0; i < nr; ++i)
{
for(int j = 0; j < nr; ++j)
{
for(int k = 0; k < nr; ++k)
{
aux[i][j] = 1LL * (aux[i][j] + 1LL * a[i][k] * b[k][j]) % mod;
}
aux[i][j] %= mod;
}
}
for(int i = 0; i < nr; ++i)
{
for(int j = 0; j < nr; ++j)
a[i][j] = aux[i][j];
}
}