#include <iostream>
#include <algorithm>
using namespace std;
template<typename Item>
class matrix
{
public:
matrix(size_t sx, size_t sy)
: _sx(sx), _sy(sy), items(nullptr)
{
items = new Item[sx * sy];
fill(items, items + sx * sy, 0);
for (size_t xy = 0; xy < min(sx, sy); xy++) (*this)(xy, xy) = 1;
}
~matrix() { delete[] items; }
size_t sx() const { return _sx; }
size_t sy() const { return _sy; }
const Item& operator()(size_t x, size_t y) const { return items[y * _sx + x]; }
Item& operator()(size_t x, size_t y) { return items[y * _sx + x]; }
private:
size_t _sx, _sy;
Item* items;
};
template<typename Item>
ostream& operator <<(ostream& strm, const matrix<Item>& m)
{
for (size_t y = 0; y < m.sy(); y++)
for (size_t x = 0; x < m.sx(); x++)
(x > 0 ? strm << " " : (y > 0 ? strm << endl : strm)) << m(x, y);
return strm;
}
int main()
{
matrix<double> m(5, 5);
m(3, 1) = 7;
cout << m << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgSXRlbT4KY2xhc3MgbWF0cml4CnsKcHVibGljOgoJbWF0cml4KHNpemVfdCBzeCwgc2l6ZV90IHN5KQoJCTogX3N4KHN4KSwgX3N5KHN5KSwgaXRlbXMobnVsbHB0cikKCXsKCQlpdGVtcyA9IG5ldyBJdGVtW3N4ICogc3ldOwoJCWZpbGwoaXRlbXMsIGl0ZW1zICsgc3ggKiBzeSwgMCk7CgkJZm9yIChzaXplX3QgeHkgPSAwOyB4eSA8IG1pbihzeCwgc3kpOyB4eSsrKSAoKnRoaXMpKHh5LCB4eSkgPSAxOwoJfQoKCX5tYXRyaXgoKSB7IGRlbGV0ZVtdIGl0ZW1zOyB9CglzaXplX3Qgc3goKSBjb25zdCB7IHJldHVybiBfc3g7IH0KCXNpemVfdCBzeSgpIGNvbnN0IHsgcmV0dXJuIF9zeTsgfQoKCWNvbnN0IEl0ZW0mIG9wZXJhdG9yKCkoc2l6ZV90IHgsIHNpemVfdCB5KSBjb25zdCB7IHJldHVybiBpdGVtc1t5ICogX3N4ICsgeF07IH0KCUl0ZW0mIG9wZXJhdG9yKCkoc2l6ZV90IHgsIHNpemVfdCB5KSB7IHJldHVybiBpdGVtc1t5ICogX3N4ICsgeF07IH0KCnByaXZhdGU6CglzaXplX3QgX3N4LCBfc3k7CglJdGVtKiBpdGVtczsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIEl0ZW0+Cm9zdHJlYW0mIG9wZXJhdG9yIDw8KG9zdHJlYW0mIHN0cm0sIGNvbnN0IG1hdHJpeDxJdGVtPiYgbSkKewoJZm9yIChzaXplX3QgeSA9IDA7IHkgPCBtLnN5KCk7IHkrKykKCQlmb3IgKHNpemVfdCB4ID0gMDsgeCA8IG0uc3goKTsgeCsrKQoJCQkoeCA+IDAgPyBzdHJtIDw8ICIgIiA6ICh5ID4gMCA/IHN0cm0gPDwgZW5kbCA6IHN0cm0pKSA8PCBtKHgsIHkpOwoJcmV0dXJuIHN0cm07Cn0KCmludCBtYWluKCkKewoJbWF0cml4PGRvdWJsZT4gbSg1LCA1KTsKCW0oMywgMSkgPSA3OwoJY291dCA8PCBtIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==