Pagini recente » Cod sursa (job #2121674) | Cod sursa (job #185978) | Cod sursa (job #2125705) | Cod sursa (job #357325) | Cod sursa (job #2632143)
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const long long MOD = 666013;
struct Mat
{
int mat[3][3];
};
const Mat nullMat =
{
{{1,0,0},
{0,1,0},
{0,0,1}}
};
Mat prod(Mat a, Mat b)
{
Mat ret;
ret.mat[0][0] = (a.mat[0][0]*b.mat[0][0] + a.mat[0][1]*b.mat[1][0] + a.mat[0][2]*b.mat[2][0]) % MOD;
ret.mat[0][1] = (a.mat[0][0]*b.mat[0][1] + a.mat[0][1]*b.mat[1][1] + a.mat[0][2]*b.mat[2][1]) % MOD;
ret.mat[0][2] = (a.mat[0][0]*b.mat[0][2] + a.mat[0][1]*b.mat[1][2] + a.mat[0][2]*b.mat[2][2]) % MOD;
ret.mat[1][0] = (a.mat[1][0]*b.mat[0][0] + a.mat[1][1]*b.mat[1][0] + a.mat[1][2]*b.mat[2][0]) % MOD;
ret.mat[1][1] = (a.mat[1][0]*b.mat[0][1] + a.mat[1][1]*b.mat[1][1] + a.mat[1][2]*b.mat[2][1]) % MOD;
ret.mat[1][2] = (a.mat[1][0]*b.mat[0][2] + a.mat[1][1]*b.mat[1][2] + a.mat[1][2]*b.mat[2][2]) % MOD;
ret.mat[2][0] = (a.mat[2][0]*b.mat[0][0] + a.mat[2][1]*b.mat[1][0] + a.mat[2][2]*b.mat[2][0]) % MOD;
ret.mat[2][1] = (a.mat[2][0]*b.mat[0][1] + a.mat[2][1]*b.mat[1][1] + a.mat[2][2]*b.mat[2][1]) % MOD;
ret.mat[2][2] = (a.mat[2][0]*b.mat[0][2] + a.mat[2][1]*b.mat[1][2] + a.mat[2][2]*b.mat[2][2]) % MOD;
return ret;
}
Mat rid(Mat a, int N)
{
if(!N)
{
return nullMat;
}
else
{
if(N%2)
{
return prod(a,rid(prod(a,a),N/2));
}
else
{
return rid(prod(a,a),N/2);
}
}
}
int main()
{
int T;
int X,Y,Z,A,B,C;
long long N;
fin>>T;
for(int i=1;i<=T;i++)
{
fin>>X>>Y>>Z>>A>>B>>C>>N;
Mat m =
{
{{A,B,C},
{1,0,0},
{0,1,0}}
};
m = rid(m,N-2);
fout<<Z*m.mat[0][0]+Y*m.mat[0][1]+X*m.mat[0][2]<<endl;
}
return 0;
}