Pagini recente » Autentificare | Cod sursa (job #2943863) | Cod sursa (job #981799) | Cod sursa (job #2284649) | Cod sursa (job #2462556)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");
int a,b,c,i,j,ii,sol[5][5],suma,i2;
void inmultire_matrici (int a1[5][5],int b[5][5])
{
for(i=1;i<=3;++i)
for(j=1;j<=3;++j)
{
suma=0;
for(i2=1;i2<=3;++i2)
suma=suma+a1[i][i2]*b[i2][j];
sol[i][j]=suma;
}
for(i=1;i<=3;++i)
for(j=1;j<=3;++j)
a1[i][j]=sol[i][j];
}
void build_matnull (int a1[5][5])
{
for(i=1;i<=3;++i)
for(j=1;j<=3;++j)
if(j==4-i)
a1[i][j]=1;
else
a1[i][j]=0;
}
void build_a (int a1[5][5])
{
a1[1][1]=a;a1[1][2]=b;a1[1][3]=c;
for(i=2;i<=3;++i)
for(j=1;j<=3;++j)
if(j==i-1)
a1[i][j]=1;
else
a1[i][j]=0;
}
void exponentiere_log (int matrice[5][5],int a1[5][5],int p)
{
for(ii=0;p>0;++ii)
{
if((p & (1<<ii))!=0)
p-=(1<<ii),inmultire_matrici(matrice,a1);
inmultire_matrici(a1,a1);
}
}
int main ()
{
int t,x[5],n,mat1[5][5],mat2[5][5],ans;
fin>>t;
while(t--)
{
fin>>x[1]>>x[2]>>x[3]>>a>>b>>c>>n;++n;
build_matnull(mat1);build_a(mat2);ans=0;
exponentiere_log(mat1,mat2,n-3);
for(i=1;i<=3;++i)
ans=ans+mat1[3][i]*x[4-i];
fout<<ans<<"\n";
}
return 0;
}