Pagini recente » Cod sursa (job #101044) | Cod sursa (job #262941) | Cod sursa (job #2134993) | Cod sursa (job #162697) | Cod sursa (job #191049)
Cod sursa(job #191049)
#include<fstream>
using namespace std;
int a[13][3][3];/*
a[i] matricea a[1] la puterea 2^i
deci a un sir de matrici 1,m,m^2, ...,m^32
*/
int T,X,Y,Z,A,B,C,N;
ofstream g("iepuri.out");
void raspuns(int d[][3]){
int r=d[0][0]*Z+d[0][1]*Y+d[0][2]*X;
g<<r<<'\n';
}
void inm(int m1[3][3],int m2[3][3], int m3[3][3]){
int i, j, k,s;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
s=0;
for(k=0;k<3;k++)
s+=m1[i][k]*m2[k][j];
m3[i][j]=s;
}
}
void constr(){
int i;
for(i=1;(1<<i)<=N;i++)
inm(a[i-1],a[i-1],a[i]);
}
void initi(int d[][3]){
d[0][0]=1;
d[0][1]=0;
d[0][2]=0;
d[1][0]=0;
d[1][1]=1;
d[1][2]=0;
d[2][0]=0;
d[2][1]=0;
d[2][2]=1;
}
void copy(int d[][3],int e[][3]){
int i, j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
d[i][j]=e[i][j];
}
void final(){
int cont=0;
N-=2;
int d[3][3],e[3][3];
initi(d);
while(N){
if(N&1){
inm(d,a[cont],e);
copy(d,e);
}
N>>=1;
cont++;
}
raspuns(d);
}
void init(){
a[0][0][0]=A;
a[0][0][1]=B;
a[0][0][2]=C;
a[0][1][0]=1;
a[0][1][1]=0;
a[0][1][2]=0;
a[0][2][0]=0;
a[0][2][1]=1;
a[0][2][2]=0;
}
int main(){
int k,i;
ifstream fisier("iepuri.in");
fisier>>T;
for(k=0;k<T;k++){
fisier>>X>>Y>>Z>>A>>B>>C>>N;
init();
constr();
if(N==0)
g<<A<<'\n';
else if(N==1)
g<<B<<'\n';
else if(N==2)
g<<C<<'\n';
else final();
}
g.close();
return 0;
}