Pagini recente » Cod sursa (job #1682855) | Cod sursa (job #2104094) | Cod sursa (job #1669836) | Cod sursa (job #2832590) | Cod sursa (job #2477288)
#include<bits/stdc++.h>
using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
int ziua1,ziua2,ziua3,m1,m2,m3;
int n;
struct matrix
{
int mat[4][4];
matrix(int diagonal)
{
for(int i=0; i<4; i++)
{
for(int k=0; k<4; k++)
{
if(i==k)
mat[i][k]=diagonal;
else
mat[i][k]=0;
}
}
}
matrix operator*(matrix&other)
{
matrix result(0);
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
for(int k=0; k<4; k++)
{
result.mat[i][j]+=mat[i][k]*other.mat[k][j];
}
}
}
return result;
}
void prt()
{
for(int i=0; i<4; i++)
{
for(int k=0; k<4; k++)
cout<<mat[i][k]<<" ";
cout<<endl;
}
}
};
void multiply(matrix&a,int*b)
{
int result[4] {0,0,0,0};
for(int i=0; i<4; i++)
{
for(int k=0; k<4; k++)
{
result[i]+=a.mat[i][k]*b[k];
}
}
for(int i=0;i<4;i++)
b[i]=result[i];
}
void read_new_set()
{
in>>ziua1>>ziua2>>ziua3>>m1>>m2>>m3>>n;
}
matrix fast_exponentiation(matrix a,int pow)
{
matrix x=a;
matrix result(1);
for(int i=1; i<=pow; i=i<<1)
{
if(pow&i)
{
result=result*x;
}
x=x*x;
}
return result;
}
int main()
{
int t;
in>>t;
for(int i=0; i<t; i++)
{
read_new_set();
int b[4] {ziua1*m3+ziua2*m2+ziua3*m1,ziua3,ziua2,ziua1};
if(n<=3)
{
out<<b[n]<<'\n';
}
else
{
matrix a(0);
a.mat[0][0]=m1;
a.mat[0][1]=m2;
a.mat[0][2]=m3;
a.mat[1][0]=m1;
a.mat[2][1]=m2;
a.mat[3][2]=m3;
a=fast_exponentiation(a,n-3);
multiply(a,b);
out<<b[0]<<'\n';
}
}
return 0;
}