Pagini recente » Cod sursa (job #714563) | Cod sursa (job #332438) | Cod sursa (job #2640797) | Cod sursa (job #369242) | Cod sursa (job #2374613)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
int a, b, c, x, y, z, n;
long long mat[4][4], slv[4][4];
const int mod = 666013;
void Initialization()
{
memset(mat, 0, sizeof(mat));
memset(slv, 0, sizeof(slv));
mat[2][1] = mat[3][2] = 1;
mat[1][3] = c;
mat[2][3] = b;
mat[3][3] = a;
slv[1][1] = slv[2][2] = slv[3][3] = 1;
}
void Multiplication(long long a[4][4], long long b[4][4])
{
long long copy_mat[4][4];
memset(copy_mat, 0, sizeof(copy_mat));
for(int i = 1; i <= 3; ++ i)
for(int j = 1; j <= 3; ++ j)
for(int k = 1; k <= 3; ++ k)
copy_mat[i][j] = (copy_mat[i][j] + a[i][k] * b[k][j]) % mod;
for(int i = 1; i <= 3; ++ i)
for(int j = 1; j <= 3; ++ j)
a[i][j] = copy_mat[i][j];
}
void Slove() // Se ridica matricea mat la puterea n-2( zilele 0, 1, 2 sunt deja facute)
{
n -= 2;
for(int i = 1; i <= n; i <<= 1)
{
if(i & n)
Multiplication(slv, mat);
Multiplication(mat, mat);
}
fout <<(x * slv[1][3] + y * slv[2][3] + z * slv[3][3]) % mod;
}
int main()
{
int task;
fin >> task;
for(int i = 1; i <= task; ++ i)
{
fin >> x >> y >> z >> a >> b >> c >> n;
Initialization();
Slove();
fout << '\n';
}
return 0;
}