Pagini recente » Borderou de evaluare (job #3351817) | Cod sursa (job #335520) | Cod sursa (job #3352216)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin( "iepuri.in" );
ofstream fout( "iepuri.out" );
#define MOD 666013
int mat_rez[4][4];
int baza[4][4];
long long rez;
void ridic ( int baza[4][4], int exp )
{
int aux[4][4];
int i, j, k, p, q;
for ( i = 1; i <= 3; i++ )
for ( j = 1; j <= 3; j++ )
mat_rez[i][j] = (i == j);
while ( exp != 0 ) {
if ( exp % 2 == 0 ) {
exp = exp / 2;
for ( i = 1; i <= 3; i++ ) {
for ( j = 1; j <= 3; j++ ) {
rez = 0;
for ( k = 1; k <= 3; k++ )
rez = ( rez + 1LL * baza[i][k] * baza[k][j] ) % MOD;
aux[i][j] = rez;
}
}
for ( p = 1; p <= 3; p++ ) {
for ( q = 1; q <= 3; q++ )
baza[p][q] = aux[p][q];
}
}
else {
exp--;
for ( i = 1; i <= 3; i++ ) {
for ( j = 1; j <= 3; j++ ) {
rez = 0;
for ( k = 1; k <= 3; k++ )
rez = (rez + 1LL * mat_rez[i][k] * baza[k][j]) % MOD;
aux[i][j] = rez;
}
}
for ( p = 1; p <= 3; p++ ) {
for ( q = 1; q <= 3; q++ )
mat_rez[p][q] = aux[p][q];
}
}
}
}
int main()
{
int x, y, z, a, b, c, i, n, t, j, ind;
fin >> t;
for ( ind = 1; ind <= t; ind++ ) {
fin >> x >> y >> z >> a >> b >> c >> n;
if ( n == 0 )
fout << x % MOD << "\n";
else if ( n == 1 )
fout << y % MOD << "\n";
else if ( n == 2 )
fout << z % MOD << "\n";
else {
for ( i = 1; i <= 3; i++ )
for ( j = 1; j <= 3; j++ )
baza[i][j] = 0;
baza[1][2] = 1;
baza[2][3] = 1;
baza[3][1] = c;
baza[3][2] = b;
baza[3][3] = a;
ridic ( baza, n - 2 );
rez = (1LL * mat_rez[3][1] * x + 1LL * mat_rez[3][2] * y + 1LL * mat_rez[3][3] * z) % MOD;
fout << rez << "\n";
}
}
return 0;
}