#include <iostream>
using namespace std;
template <typename T>
class Matrix {
private:
int rows, cols;
T** data;
public:
Matrix(int r, int c) : rows(r), cols(c) {
data = new T*[rows];
for (int i = 0; i < rows; ++i)
data[i] = new T[cols];
}
~Matrix() {
for (int i = 0; i < rows; ++i)
delete[] data[i];
delete[] data;
}
void input() {
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; ++j)
cin >> data[i][j];
}
void print() const {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j)
cout << data[i][j] << " ";
cout << endl;
}
}
Matrix<T> operator-(const Matrix<T>& other) {
if (rows != other.rows || cols != other.cols)
throw runtime_error("Розміри матриць не співпадають!");
Matrix<T> result(rows, cols);
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; ++j)
result.data[i][j] = data[i][j] - other.data[i][j];
return result;
}
};
int main() {
Matrix<int> A(2, 2);
Matrix<int> B(2, 2);
A.input();
B.input();
Matrix<int> C = A - B;
C.print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIE1hdHJpeCB7CnByaXZhdGU6CiAgICBpbnQgcm93cywgY29sczsKICAgIFQqKiBkYXRhOwoKcHVibGljOgogICAgCiAgICBNYXRyaXgoaW50IHIsIGludCBjKSA6IHJvd3MociksIGNvbHMoYykgewogICAgICAgIGRhdGEgPSBuZXcgVCpbcm93c107CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpCiAgICAgICAgICAgIGRhdGFbaV0gPSBuZXcgVFtjb2xzXTsKICAgIH0KCiAgICAKICAgIH5NYXRyaXgoKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpCiAgICAgICAgICAgIGRlbGV0ZVtdIGRhdGFbaV07CiAgICAgICAgZGVsZXRlW10gZGF0YTsKICAgIH0KCiAgICB2b2lkIGlucHV0KCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNvbHM7ICsraikKICAgICAgICAgICAgICAgIGNpbiA+PiBkYXRhW2ldW2pdOwogICAgfQoKICAgCiAgICB2b2lkIHByaW50KCkgY29uc3QgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29sczsgKytqKQogICAgICAgICAgICAgICAgY291dCA8PCBkYXRhW2ldW2pdIDw8ICIgIjsKICAgICAgICAgICAgY291dCA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KICAgIE1hdHJpeDxUPiBvcGVyYXRvci0oY29uc3QgTWF0cml4PFQ+JiBvdGhlcikgewogICAgICAgIGlmIChyb3dzICE9IG90aGVyLnJvd3MgfHwgY29scyAhPSBvdGhlci5jb2xzKQogICAgICAgICAgICB0aHJvdyBydW50aW1lX2Vycm9yKCLQoNC+0LfQvNGW0YDQuCDQvNCw0YLRgNC40YbRjCDQvdC1INGB0L/RltCy0L/QsNC00LDRjtGC0YwhIik7CgogICAgICAgIE1hdHJpeDxUPiByZXN1bHQocm93cywgY29scyk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpCiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29sczsgKytqKQogICAgICAgICAgICAgICAgcmVzdWx0LmRhdGFbaV1bal0gPSBkYXRhW2ldW2pdIC0gb3RoZXIuZGF0YVtpXVtqXTsKCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgTWF0cml4PGludD4gQSgyLCAyKTsKICAgIE1hdHJpeDxpbnQ+IEIoMiwgMik7CgogICAgQS5pbnB1dCgpOwoKICAgIEIuaW5wdXQoKTsKICAgIAogICAgTWF0cml4PGludD4gQyA9IEEgLSBCOwogICAgCiAgICBDLnByaW50KCk7CiAgICAKICAgIHJldHVybiAwOwp9Cg==