CompProg

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub Zeldacrafter/CompProg

:warning: code/math/dynamicMatrix.cc

Depends on

Code

#include "../template.hh"
template<typename T>
struct matrix : public vector<vector<T>> {
  matrix(int sz) : vector<vector<T>>(sz, vector<T>(sz)) {}
  matrix(int sz, const T& val) : vector<vector<T>>(sz, vector<T>(sz)) {
    F0R (i, SZ(*this)) (*this)[i][i] = val;
  }
  matrix& operator+=(const matrix& o) {
    F0R (r, SZ(*this)) F0R (c, SZ(*this)) (*this)[r][c] += o[r][c];
    return *this;
  }
  matrix& operator-=(const matrix& o) {
    F0R (r, SZ(*this)) F0R (c, SZ(*this)) (*this)[r][c] -= o[r][c];
    return *this;
  }
  matrix& operator*=(const matrix& o) {
    return *this = *this * o;
  }
  matrix& operator*=(T v) {
    F0R (r, SZ(*this)) F0R (c, this->sz) (*this)[r][c] *= v;
    return *this;
  }
  friend matrix operator+(const matrix a, const matrix& b) {
    return a += b;
  }
  friend matrix operator-(const matrix a, const matrix& b) {
    return a -= b;
  }
  friend matrix operator*(const matrix& a, const matrix& b) {
    matrix res{SZ(a)};
    F0R (r, SZ(a)) F0R (c, SZ(a)) F0R (k, SZ(a)) res[r][c] += a[r][k] * b[k][c];
    return res;
  }
  friend matrix operator*(matrix a, T v) {
    return a *= v;
  }
  friend matrix operator*(T v, matrix a) {
    return a *= v;
  }
};
#line 1 "code/template.cc"
// this line is here for a reason
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
#define fi first
#define se second
#define eb emplace_back
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define endl '\n'
#define ALL(x) (x).begin(), (x).end()
#define RALL(x) (x).rbegin(), (x).rend()
#define SZ(x) (int)(x).size()
#define FOR(a, b, c) for (auto a = (b); (a) < (c); ++(a))
#define F0R(a, b) FOR (a, 0, (b))
template <typename T>
bool ckmin(T& a, const T& b) { return a > b ? a = b, true : false; }
template <typename T>
bool ckmax(T& a, const T& b) { return a < b ? a = b, true : false; }
#ifndef DEBUG
#define DEBUG 0
#endif
#define dout if (DEBUG) cerr
#define dvar(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
#line 2 "code/math/dynamicMatrix.cc"
template<typename T>
struct matrix : public vector<vector<T>> {
  matrix(int sz) : vector<vector<T>>(sz, vector<T>(sz)) {}
  matrix(int sz, const T& val) : vector<vector<T>>(sz, vector<T>(sz)) {
    F0R (i, SZ(*this)) (*this)[i][i] = val;
  }
  matrix& operator+=(const matrix& o) {
    F0R (r, SZ(*this)) F0R (c, SZ(*this)) (*this)[r][c] += o[r][c];
    return *this;
  }
  matrix& operator-=(const matrix& o) {
    F0R (r, SZ(*this)) F0R (c, SZ(*this)) (*this)[r][c] -= o[r][c];
    return *this;
  }
  matrix& operator*=(const matrix& o) {
    return *this = *this * o;
  }
  matrix& operator*=(T v) {
    F0R (r, SZ(*this)) F0R (c, this->sz) (*this)[r][c] *= v;
    return *this;
  }
  friend matrix operator+(const matrix a, const matrix& b) {
    return a += b;
  }
  friend matrix operator-(const matrix a, const matrix& b) {
    return a -= b;
  }
  friend matrix operator*(const matrix& a, const matrix& b) {
    matrix res{SZ(a)};
    F0R (r, SZ(a)) F0R (c, SZ(a)) F0R (k, SZ(a)) res[r][c] += a[r][k] * b[k][c];
    return res;
  }
  friend matrix operator*(matrix a, T v) {
    return a *= v;
  }
  friend matrix operator*(T v, matrix a) {
    return a *= v;
  }
};
Back to top page