求\(n^2\)的矩陣的逆
翻了翻題解,看到了初等矩陣這個東西,突然想起來在看線代的時候看到過....
然後又溫習了一遍線性代數的知識
不妨設\(pa = e\),其中\(p\)是一堆初等矩陣的積(必須同時是行變換)
由於\(pa = e, pe = p\),因此\(p(a, e) = (e, p)\)
所以我們只要對矩陣\((a, e)\)來做初等變換
由於我們只做行變換
因此,兩個分塊矩陣之間互相不干擾
所以當左側的\(a\)變化為\(e\)時,右邊的\(e\)自然變成了\(p\)
複雜度\(o(n^3)\)
#include #include #include #include using namespace std;
#define ri register int
#define rep(io, st, ed) for(ri io = st; io <= ed; io ++)
#define drep(io, ed, st) for(ri io = ed; io >= st; io --)
#define gc getchar
inline int read()
while(c >= '0' && c <= '9') p = p * 10 + c - '0', c = gc();
return p * w;
}const int sid = 405;
const int mod = 1e9 + 7;
inline void inc(int &a, int b)
inline void dec(int &a, int b)
inline int mul(int a, int b)
inline int inv(int a)
int n;
int a[sid][sid], b[sid][sid];
inline int guass()
} }rep(i, 1, n)
return 1;
}int main()
} else printf("no solution\n");
return 0;
}
也許下次我們可以出一道求\(ap = b\)或者\(pa = b\)的\(p\)
相信能卡死一片人qaq
P4783 模板 矩陣求逆
題目大意 給你乙個矩陣 a 求它的逆矩陣 a 使得 aa i 題解 設 a ie 1e 2 cdots e k e i 為乙個變換 那麼 a e k e cdots e 可以在 a 變為 i 的時候對 i 做相同的操作。當 a 變為 i 時,i 就變成了 a 卡點 無 c code include ...
題解 P4783 模板 矩陣求逆
求乙個n n的矩陣的逆矩陣。答案對10 9 7取模。n 400 矩陣的初等變換 矩陣的逆定義為 a b e e為單位矩陣 此時b為a的逆 如果矩陣有逆 那麼這個矩陣經過一系列初等變化之後可以變為e 設一系列初等變化分別為p1,p2,p3.px 顯然可得a p1 p2 p3 px e 所以b p1 p...
洛谷 P4783 模板 矩陣求逆
可以直接建乙個 n 2 n n times 2 n n 2 n 的矩陣,左半部分為給定矩陣,右半部分為單位矩陣,進行高斯消元 在取模意義下,除法轉化為乘以乘法逆元,模數是質數,逆元用費馬小定理加快速冪求即可。include include using namespace std inline int...