Pagini recente » hiking | Clasament infoarena | Cod sursa (job #366966) | Cod sursa (job #366965) | Cod sursa (job #804592)
Cod sursa(job #804592)
#include <fstream>
#define MOD 666013
using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
long long Rez[4][4],M[4][4],Aux[4][4];
int main()
{
int T,X,Y,Z,A,B,C,N;
int i,j,k;
in>>T;
while(T--)
{
in>>X>>Y>>Z>>A>>B>>C>>N;
M [0][0] = 0,M [0][1] = 0,M [0][2] = C,M [1][0] = 1,M [1][1] = 0,M [1][2] = B,M [2][0] = 0,M [2][1] = 1,M [2][2] = A;
Rez[0][0] = 1,Rez[0][1] = 0,Rez[0][2] = 0,Rez[1][0] = 0,Rez[1][1] = 1,Rez[1][2] = 0,Rez[2][0] = 0,Rez[2][1] = 0,Rez[2][2] = 1;
N-=2;
for(;N;N/=2)
{
for(i=0;i<3;i++)
for(j=0;j<3;j++)Aux[i][j] = 0;
if(N&1)//daca bitul e 1 Rez = Rez * M
{
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
{
Aux[i][j]+=Rez[i][k]*M[k][j]%MOD;
Aux[i][j]%=MOD;
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
Rez[i][j] = Aux[i][j];
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)Aux[i][j] = 0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
{
Aux[i][j]+=M[i][k]*M[k][j];
Aux[i][j]%=MOD;
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
M[i][j] = Aux[i][j];
}
out<<(X*Rez[0][2]+Y*Rez[1][2]+Z*Rez[2][2])%MOD<<'\n';
}
return 0;
}