Pagini recente » Solutii preONI 2007, Runda 3 | Cod sursa (job #1159548) | Cod sursa (job #2576040) | Cod sursa (job #2015731) | Cod sursa (job #365583)
Cod sursa(job #365583)
#include <fstream.h>
#define RRR 666013
int ABC[4][4],ABCN[4][4];
void init();
void pow(int n);
void AxB(int A[4][4],int B[4][4]);
int main()
{
int i,j,k,n,t,x,y,z;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
in>>t;
for(i=1;i<=t;++i)
{
init();
in>>x>>y>>z;
in>>ABC[3][3]>>ABC[3][2]>>ABC[3][1]; ABC[1][2]=ABC[2][3]=1;
in>>n; pow(n);
x=ABCN[1][1]*x+ABCN[1][2]*y+ABCN[1][3]*z;
if(x>=RRR) x%=RRR;
out<<x<<'\n';
}
in.close(); out.close();
return 0;
}
void init()
{
int i,j;
for(i=1;i<=3;++i)
for(j=1;j<=3;++j) ABCN[i][j]=ABC[i][j]=0;
}
void pow(int n)
{
ABCN[1][1]=ABCN[2][2]=ABCN[3][3]=1;
while(n>0)
{
if(n&1==1){ AxB(ABCN,ABC); --n; }
AxB(ABC,ABC);
n>>=1;
}
}
void AxB(int A[4][4],int B[4][4])
{
int i,j,C[4][4];
for(i=1;i<=3;++i)
for(j=1;j<=3;++j)
{
C[i][j]=A[i][1]*B[1][j]+A[i][2]*B[2][j]+A[i][3]*B[3][j];
if(C[i][j]>=RRR) C[i][j]%=RRR;
}
for(i=1;i<=3;++i)
for(j=1;j<=3;++j) A[i][j]=C[i][j];
}