一、传送门
https://www.luogu.com.cn/problem/P3389
https://www.luogu.com.cn/problem/P2455
二、代码
日……两道题合起来搞了我十几个小时,最后把我气得从别人的 AC 代码开始再一句一句改成适配自己模板的同义的语句。
有些细节还是不太懂,暂时先把模板放上来。以后有时间再出详解。
————————————————————————————————————————————————————
高斯消元函数 gauss_elim() 的返回值:
0,唯一解;1,格式错(矩阵不是n行×(n+1)列);2,无数解;3,无解。
————————————————————————————————————————————————————
P3389:
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdint>
#include<vector>
#pragma warning(disable:4996)
using namespace std;
template<class _Ty = double> class matrix {
private:
vector<vector<_Ty>> m; size_t row, col, _size;
public:
matrix() {
row = col = _size = 0; }
matrix(const size_t& r, const size_t& c) {
init(r, c); }
virtual ~matrix() {
del(); }
void clear() {
fill(m[0], m[0] + _size, 0); }
void del() {
m.resize(0); }
void init(const size_t& r, const size_t& c) {
row = r; col = c; _size = row * col; m.resize(r); for (size_t i = 0; i != r; ++i)m[i].resize(c);
}
void resize(const size_t& r, const size_t& c) const {
del(); init(r, c); }
void resize_directly(const size_t& r, const size_t& c) {
row = r; col = c; _size = row * col; }
size_t _row() const {
return row; }
size_t _col() const {
return col; }
size_t size() const {
return _size; }
void row_mul(const size_t& row, const _Ty& val) {
for (size_t i = 0; i != col; ++i)m[row][i] *= val;
}
void row_mul_add_to(const size_t& rs, const _Ty& val, const size_t& rd) {
for (size_t i = 0; i != col; ++i)m[rd][i] += m[rs