Pagini recente » Cod sursa (job #2346257) | Cod sursa (job #77834) | Cod sursa (job #2184759) | Cod sursa (job #2488726) | Cod sursa (job #2264298)
#include <iostream>
#include <fstream>
using namespace std;
class Vector
{
private:
long long *vector;
long long n;
public:
Vector();
Vector(long long n);
Vector(Vector &V);
long long &operator[] (long long i);
long long Length();
void init(long long n);
};
long long Vector::Length()
{
return this->n;
}
Vector::Vector()
{
init(1);
}
Vector::Vector(long long n)
{
init(n);
}
Vector::Vector(Vector &V) : n(V.n)
{
for (long long i = 0; i < n; i++)
this[i] = V[i];
}
long long &Vector::operator[] (long long i)
{
return vector[i];
}
void Vector::init(long long n)
{
vector = new long long[n] {0};
this->n = n;
}
class Matrix
{
private:
Vector * matrix;
long long n;
void init(long long n);
public:
Matrix(long long n);
Matrix(Matrix &M);
Matrix operator*(const Matrix &M);
Matrix operator%(long long p);
Matrix power(long long p);
Vector & operator[](long long i);
};
void Matrix::init(long long n)
{
matrix = new Vector[n];
this -> n = n;
for (long long i = 0; i < n; i++)
matrix[i].init(n);
}
Matrix::Matrix(long long n)
{
init(n);
}
Matrix::Matrix(Matrix &M)
{
if (n != M.n)
init(M.n);
for (long long i = 0; i < n; i++)
for (long long j = 0; j < n; j++)
matrix[i][j] = M.matrix[i][j];
}
Matrix Matrix::operator*(const Matrix &M)
{
Matrix R(n);
for (long long i = 0; i < n; i++)
for (long long j = 0; j < n; j++)
for (long long k = 0; k < n; k++)
R[i][j] += matrix[i][k] * M.matrix[k][j];
return R;
}
Matrix Matrix::operator%(long long p)
{
Matrix R(n);
for (long long i = 0; i < n; i++)
for (long long j = 0; j < n; j++)
R[i][j] = matrix[i][j] % p;
return R;
}
Matrix Matrix::power(long long p)
{
Matrix X = *this;
while (!(p & 1))
{
X = X * X;
p /= 2;
}
Matrix R = X;
p--;
while (p)
{
if (p & 1)
{
R = R * X;
p--;
}
else
{
X = X * X;
p /= 2;
}
}
return R;
}
Vector & Matrix::operator[](long long i)
{
return matrix[i];
}
int main()
{
int x, y, z, A, B, C, N, T;
Matrix F(3), M(3);
ifstream f("iepuri.in");
ofstream g("iepuri.out");
for (int i = 1; i < 3; i ++)
for (int j = 0; j < 3; j ++)
F[i][j] = 0;
f >> T;
for (int i = 0; i < T; i ++)
{
f >> x >> y >> z >> A >> B >> C >> N;
M[0][0] = M[0][1] = M[1][1] = M[2][0] = 0;
M[1][0] = M[2][1] = 1;
M[0][2] = C;
M[1][2] = B;
M[2][2] = A;
F[0][0] = x;
F[0][1] = y;
F[0][2] = z;
g << (F * M.power(N - 2))[0][2] << "\n";
}
return 0;
}