luoguP4783 模板 矩陣求逆 線性代數

2022-04-30 06:09:08 字數 1186 閱讀 9460

求\(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...