Pagini recente » Profil M@2Te4i | Monitorul de evaluare | Istoria paginii utilizator/ioanaprioteasa15 | Rating MartinAlexandru (Martin98) | Cod sursa (job #100944)
Cod sursa(job #100944)
#include <cstdio>
const int mod = 666013;
FILE *in = fopen("iepuri.in","r"), *out = fopen("iepuri.out","w");
int t;
int x, y, z, A, B, c, n;
int a[3][3], b[3][3], init[3][3];
void ini()
{
for ( int i = 0; i < n; ++i )
for ( int j = 0; j < n; ++j )
a[i][j] = 0;
a[0][1] = a[1][2] = 1;
a[2][0] = c;
a[2][1] = B;
a[2][2] = A;
for ( int i = 0; i < n; ++i )
for ( int j = 0 ; j <n ;++j )
init[i][j] = a[i][j];
}
void mult(int r[3][3], int c[3][3], int d[3][3])
{
for ( int i = 0; i < 3; ++i )
for ( int j = 0; j < 3; ++j )
{
r[i][j] = 0;
for ( int k = 0; k < 3; ++k )
r[i][j] += c[i][k]*d[k][j], r[i][j] %= mod;
}
}
void inm(int a[3][3], int p)
{
if ( p == 1 )
return;
if ( p % 2 == 0 )
{
inm(a, p/2);
mult(b, a, a);
for ( int i = 0; i < 3; ++i )
for ( int j = 0; j < 3; ++j )
a[i][j] = b[i][j];
}
else
{
inm(a, p/2);
mult(b, a, a);
for ( int i = 0; i < 3; ++i )
for ( int j = 0; j < 3; ++j )
a[i][j] = b[i][j];
mult(b, a, init);
for ( int i = 0; i < 3; ++i )
for ( int j = 0; j < 3; ++j )
a[i][j] = b[i][j];
}
}
int main()
{
fscanf(in, "%d", &t);
while ( t-- )
{
fscanf(in, "%d %d %d %d %d %d %d", &x, &y, &z, &A, &B, &c, &n);
ini();
inm(a, n);
int answ = 0;
answ = ((a[0][0] % mod * x % mod) % mod + (a[0][1] % mod * y % mod) % mod + (a[0][2] % mod * z % mod) % mod);
fprintf(out, "%d\n", answ % mod);
}
return 0;
}