Pagini recente » Cod sursa (job #659623) | Cod sursa (job #3154911) | Cod sursa (job #1775167) | Istoria paginii runda/pre004/clasament | Cod sursa (job #1835593)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
const int mod = 666013;
int init[5][5];
int rez[5][5];
int aux[5][5];
void reinit()
{
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
aux[i][j] = 0;
init[i][j] = 0;
aux[i][j] = 0;
}
}
}
void inmult(int m1[5][5], int m2[5][5])
{
for(int i = 1; i <= 3; i++)
for(int j = 1; j <= 3; j++)
aux[i][j] = 0;
for(int i = 1; i <= 3; i++)
for(int j = 1; j <= 3; j++)
for(int k = 1; k <= 3; k++)
aux[i][j] = (aux[i][j] + 1LL * m1[i][k] * m2[k][j]) % mod;
}
void initializare(int a, int b, int c)
{
init[1][1] = 0;
init[1][2] = 0;
init[1][3] = c;
init[2][1] = 1;
init[2][2] = 0;
init[2][3] = b;
init[3][1] = 0;
init[3][2] = 1;
init[3][3] = a;
}
void solve()
{
reinit();
int x, y, z, a, b, c, n;
in >> x >> y >> z >> a >> b >> c >> n;
//n--;
initializare(a, b, c);
rez[1][1] = x;
rez[1][2] = y;
rez[1][3] = z;
while(n)
{
if(n % 2 != 0)
{
inmult(rez, init);
for(int i = 1; i <= 3; i++)
for(int j = 1; j <= 3; j++)
rez[i][j] = aux[i][j];
}
inmult(init, init);
for(int i = 1; i <= 3; i++)
for(int j = 1; j <= 3; j++)
init[i][j] = aux[i][j];
n = n / 2;
}
out << rez[1][1] << "\n";
}
int main()
{
int T;
in >> T;
for(int i = 1; i <= T; i++)
solve();
return 0;
}