Mai intai trebuie sa te autentifici.
Cod sursa(job #2019364)
Utilizator | Data | 7 septembrie 2017 16:50:08 | |
---|---|---|---|
Problema | Iepuri | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.79 kb |
#include <iostream>
#include <cstdio>
#define MOD 666013
using namespace std;
int t,n,x,y,z,a,b,c;
int h[3][3];
void inmultireMatrice(int m1[3][3],int m2[3][3],int rez[3][3])
{
rez[0][0]=m1[0][0]*m2[0][0]+m1[0][1]*m2[1][0]+m1[0][2]*m2[2][0];
rez[0][1]=m1[0][0]*m2[0][1]+m1[0][1]*m2[1][1]+m1[0][2]*m2[2][1];
rez[0][2]=m1[0][0]*m2[0][2]+m1[0][1]*m2[1][2]+m1[0][2]*m2[2][2];
rez[1][0]=m1[1][0]*m2[0][0]+m1[1][1]*m2[1][0]+m1[1][2]*m2[2][0];
rez[1][1]=m1[1][0]*m2[0][1]+m1[1][1]*m2[1][1]+m1[1][2]*m2[2][1];
rez[1][2]=m1[1][0]*m2[0][2]+m1[1][1]*m2[1][2]+m1[1][2]*m2[2][2];
rez[2][0]=m1[2][0]*m2[0][0]+m1[2][1]*m2[1][0]+m1[2][2]*m2[2][0];
rez[2][1]=m1[2][0]*m2[0][1]+m1[2][1]*m2[1][1]+m1[2][2]*m2[2][1];
rez[2][2]=m1[2][0]*m2[0][2]+m1[2][1]*m2[1][2]+m1[2][2]*m2[2][2];
}
void cpy(int m1[3][3],int m2[3][3])
{
for(int i=0; i<3; i++)
for(int ii=0; ii<3; ii++)
m1[i][ii]=m2[i][ii];
}
void putere(int m[3][3],int p)
{
int rez[3][3]={{1,0,0},{0,1,0},{0,0,1}},aux[3][3];
while(p)
{
if(p%2)
{
inmultireMatrice(rez,m,aux);
cpy(rez,aux);
p--;
}
inmultireMatrice(m,m,aux);
cpy(m,aux);
p/=2;
}
printf("%d\n",(x*rez[0][2]%MOD+y*rez[1][2]%MOD+z*rez[2][2]%MOD)%MOD);
}
void init(int a,int b,int c,int m[3][3])
{
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;
}
int main()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%d",&t);
for(int i=0; i<t; i++)
{
scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
init(a,b,c,h);
putere(h,n-2);
}
return 0;
}