Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct matrix{
- int n, m;
- vector<vector<int64_t>> M;
- matrix(int nn, int mm){
- n = nn;
- m = mm;
- M.resize(n);
- for(int i = 0; i < n; ++i)
- M[i].resize(m);
- }
- matrix(vector<vector<int64_t>> &v){
- M = v;
- n = v.size();
- if(n) m = v[0].size();
- }
- void print(){
- cout << "\n";
- for(int i = 0; i < n; ++i,cout << "\n")
- for(int j = 0; j < m; ++j)
- cout << M[i][j] << " ";
- }
- vector<int64_t>& operator[](int i){
- return M[i];
- }
- };
- matrix transp(matrix &x){
- matrix r(x.m,x.n);
- for(int i = 0; i < x.n; ++i)
- for(int j = 0; j < x.m; ++j)
- r[j][i] = x[i][j];
- return r;
- }
- matrix rtransp(matrix &x){
- matrix r(x.m,x.n);
- for(int i = 0; i < x.n; ++i)
- for(int j = 0; j < x.m; ++j)
- r[x.m-j-1][x.n-i-1] = x[i][j];
- return r;
- }
- matrix operator +(matrix &a, matrix &b){
- matrix r(a.n,a.m);
- for(int i = 0; i < a.n; ++i)
- for(int j = 0; j < a.m; ++j)
- r[i][j] = a[i][j]+b[i][j];
- return r;
- }
- matrix& operator +=(matrix &a, matrix &b){
- for(int i = 0; i < a.n; ++i)
- for(int j = 0; j < a.m; ++j)
- a[i][j]+=b[i][j];
- return a;
- }
- matrix operator *(matrix &a, matrix &b){
- matrix r(a.n,b.m);
- for(int i = 0; i < a.n; ++i)
- for(int j = 0; j < b.m; ++j)
- for(int k = 0; k < a.m; ++k){
- r[i][j] += a[i][k]*b[k][j];
- }
- return r;
- }
- matrix& operator *=(matrix &a, matrix &b){
- a = a*b;
- return a;
- }
- matrix edmtx(matrix &a){
- matrix res(a.m,a.m);
- for(int i = 0; i < a.m; ++i)
- res[i][i] = 1;
- return res;
- }
- matrix operator ^(matrix &a, int64_t b){
- matrix res = edmtx(a);
- for(;b;b>>=1){
- if(b&1) res*=a;
- a*=a;
- }
- return res;
- }
- matrix& operator ^=(matrix &a, int64_t b){
- a = a^b;
- return a;
- }
- ostream& operator <<(ostream& out, matrix& m){
- for(int i = 0; i < m.n; ++i, out << "\n")
- for(int j = 0; j < m.m; ++j)
- out << m[i][j] << " ";
- return out;
- }
- ostream& operator <<(ostream& out, matrix m){
- for(int i = 0; i < m.n; ++i, out << "\n")
- for(int j = 0; j < m.m; ++j)
- out << m[i][j] << " ";
- return out;
- }
- istream& operator >>(istream& in, matrix& m){
- for(int i = 0; i < m.n; ++i)
- for(int j = 0; j < m.m; ++j)
- in >> m[i][j];
- return in;
- }
- bool operator <(matrix& a, matrix& b){
- return a.M<b.M;
- }
- bool operator >(matrix& a, matrix& b){
- return a.M>b.M;
- }
- bool operator ==(matrix& a, matrix& b){
- return a.M==b.M;}
- bool operator !=(matrix& a, matrix& b){
- return a.M!=b.M;
- }
- bool operator >=(matrix& a, matrix& b){
- return a.M>=b.M;
- }
- bool operator <=(matrix& a, matrix& b){
- return a.M<=b.M;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement