WA50分求调
查看原帖
WA50分求调
482610
Mortidesperatslav楼主2023/7/21 11:01
#include<bits/stdc++.h>
#define int long long
template<class Type, int nn, int mm>
class matrix {
	public:
		Type val[nn + 3][mm + 3];
		int n, m;
		void read(int n, int m) {
			this->n = n, this->m = m;
			for (register int i = 0; i < n; i++)
				for (register int j = 0; j < m; j++)
					std::cin >> this->val[i][j];
		}
		void print() {
			for (register int i = 0; i < n; i++) {
				for (register int j = 0; j < m; j++) {
					std::cout << this->val[i][j] << " ";
				}
				std::cout << "\n";
			}
		}
		matrix operator -() {
			matrix<Type, nn, mm> tmp;
			for (register int i = 0; i < n; i++)
				for (register int j = 0; j < m; j++)tmp.val[i][j] = -(this->val[i][j]);
			return tmp;
		}
		matrix operator +(matrix b) {
			matrix<Type, nn, mm> tmp;
			for (register int i = 0; i < n; i++)
				for (register int j = 0; j < m; j++)tmp.val[i][j] = (this->val[i][j] + b.val[i][j]);
			return tmp;
		}
		matrix operator =(matrix b) {
			for (register int i = 0; i < n; i++)
				for (register int j = 0; j < m; j++)this->val[i][j] = b.val[i][j];
			return b;
		}
		matrix operator +=(matrix b) {
			(*this) = (*this) + b;
			return (*this);
		}
		matrix operator -(matrix b) {
			return (*this) + (-b);
		}
		matrix operator -=(matrix b) {
			(*this) = (*this) - b;
			return (*this);
		}
		matrix operator *(matrix b) {
			matrix<Type,nn,mm> res;
			res.m=res.n=this->n;
			memset(res.val, 0, sizeof(res.val));
			for (register int i = 0; i < this->n; i++)
				for (register int j = 0; j < this->m; j++)
					for (register int k = 0; k < b.m; k++)
						res.val[i][j] = (res.val[i][j] + ((this->val[i][k] % 1000000007) * (b.val[k][j] % 1000000007)) % 1000000007) % 1000000007;
			return res;
		}
		matrix operator *=(matrix b) {
			(*this) = (*this) * b;
			this->m=b.m;
			return (*this);
		}
		matrix operator ^(long long y) {
			matrix<Type,nn,mm> res;
			res.m = res.n = n;
			res.val[0][0] = -1;
			while (y) {
				if (y & 1) {
					if (res.val[0][0] == -1)res = (*this);
					else res *= (*this);
				}
				(*this) *= (*this);
				y >>= 1;
			}
			return res;
		}
		matrix operator ^=(long long b) {
			(*this) = (*this) ^ b;
			return (*this);
		}
};
matrix<long long, 101, 101>x,y;
signed main() {
	long long n, m, k;
	std::cin >> n >> m>>k;
	x.read(n, m);
	y.read(m, k);
	x *= y;
	x.print();
}
2023/7/21 11:01
加载中...