Pagini recente » Cod sursa (job #2017506) | Cod sursa (job #2047731) | Cod sursa (job #1736083) | Cod sursa (job #1255740) | Cod sursa (job #2634170)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int mod=666013;
class Matrix
{
public:
typedef long long size_var; ///schimba long long cu int sau un obiect daca trebuie
vector < vector < size_var > > mat;
int const lines () ///pentru assignment
const {
return mat.size()-1;
}
int const columns () ///pentru assignment
const {
return mat[0].size()-1;
}
void makeUnitary()
{
///doar pentru matrici patratice, altfel da eroare
mat=vector<vector<size_var> > (lines()+1, vector<size_var> (columns()+1, 0));
for(int i=1; i<=lines(); i++)
mat[i][i]=1;
}
Matrix (int const & n, int const & m, size_var const & val=0)
{
mat= vector< vector <size_var> > (n+1, vector <size_var>(m+1, val));
}
vector<size_var> & operator [] (int const & t1)
&{
return mat[t1];
}
Matrix operator * (Matrix const & mati2)
{
///se presupune ca m1=n2;
Matrix rez(lines(), mati2.columns());
for(int i=1; i<=lines(); i++)
for(int j=1; j<=mati2.columns(); j++)
{
size_var rezi=0;
for(int q=1; q<=columns(); q++)
{
rezi+=mat[i][q]*mati2.mat[q][j];
rezi%=mod;
///^daca e necesar modulo^
}
rez[i][j]=rezi;
}
return rez;
}
void operator *= (Matrix const & mati2)
{
///se presupune ca m1=n2;
Matrix rez(lines(), mati2.columns());
rez=(*this)*mati2;
this->mat=rez.mat;
}
Matrix operator ^ (size_var const & put) ///pow
{
Matrix rez(lines(), lines());
size_var ptt=put;
Matrix mat1=(*this);
rez.makeUnitary();
while(ptt)
{
if(ptt&1) rez*=mat1;
mat1*=mat1; ptt>>=1;
}
return rez;
}
};
ifstream in ("iepuri.in");
ofstream out("iepuri.out");
int queries, X, Y, Z, A, B, C, N;
int main()
{
in>>queries;
while(queries--)
{
in>>X>>Y>>Z>>A>>B>>C>>N;
Matrix mat(3, 3);
mat[1][1]=A; mat[1][2]=B; mat[1][3]=C; mat[2][1]=1; mat[3][2]=1;
Matrix reza=mat^(N-2);
Matrix rez(3, 1);
rez[1][1]=Z; rez[2][1]=Y; rez[3][1]=X;
reza*=rez;
out<<reza[1][1]<<"\n";
}
return 0;
}