Pagini recente » Cod sursa (job #2310364) | Cod sursa (job #239812) | Cod sursa (job #2942531) | Cod sursa (job #809531) | Cod sursa (job #1793148)
//Iepuri
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
#define MOD 666013
long T, X, Y, Z, a, b, c, N;
void matrixExponentiation(long A[3][3], long N) {
if(N == 1) {
A[0][0] = 0; A[0][1] = 1; A[0][2] = 0;
A[1][0] = 0; A[1][1] = 0; A[1][2] = 1;
A[2][0] = c; A[2][1] = b; A[2][2] = a;
return;
}
int i, j, k;
long temp[3][3]={0};
if(N%2 == 0) {
matrixExponentiation(A, N/2);
for(i = 0 ; i < 3 ; i++)
for(k = 0 ; k < 3 ; k++)
for(j = 0 ; j < 3 ; j++) {
temp[i][k] += A[i][j]*A[j][k];
temp[i][k] %= MOD;
}
for(i = 0 ; i < 3 ; i++)
for(j = 0 ; j < 3 ; j++)
A[i][j] = temp[i][j];
return;
}
if(N%2 == 1) {
matrixExponentiation(A, N-1);
temp[0][0] = A[1][0]; temp[0][1] = A[1][1]; temp[0][2] = A[1][2];
temp[1][0] = A[2][0]; temp[1][1] = A[2][1]; temp[1][2] = A[2][2];
temp[2][0] = (c*A[0][0] + b*A[1][0] + a*A[2][0])%MOD;
temp[2][1] = (c*A[0][1] + b*A[1][1] + a*A[2][1])%MOD;
temp[2][2] = (c*A[0][2] + b*A[1][2] + a*A[2][2])%MOD;
for(i = 0 ; i < 3 ; i++)
for(j = 0 ; j < 3 ; j++)
A[i][j] = temp[i][j];
return;
}
}
int main()
{
long A[3][3], i;
fin>>T;
for(i = 1 ; i <= T ; i++) {
fin>>X>>Y>>Z>>a>>b>>c>>N;
matrixExponentiation(A, N-2);
fout<<A[2][0]*X + A[2][1]*Y + A[2][2]*Z<<'\n';
}
fin.close();
fout.close();
return 0;
}