題解 P4783 模板 矩陣求逆

2021-09-11 20:36:17 字數 1196 閱讀 6710

求乙個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*p2*p3*...*px

這樣的話就很好做了

我們利用高斯消元來讓a逐漸變為單位矩陣

設b初始為e

b也跟著a同步變換

那麼到a變為單位矩陣時 b也就是p1*p2*p3*...*px的值了

矩陣無逆的情況顯然是高斯消元無法再消(a[1][i]-a[n][i]都為0時)特判輸出就行哩

#includeusing

namespace

std;

#define ll long long

#define c getchar()-48inline ll read()

const ll n=410,p=1e9+7

;ll n;

struct

xin

//b的話直接呼叫b

inline void swap(int x,int y)

inline

void mul(int x,int k)//

a[x]=k*a[y];

inline void add(int x,int y,int k)//

a[x]加k*a[y]

inline void

prt()

}}a,b;

inline ll ksm(ll a,ll b)

return

ans;

}void

gaosi()

if(!a.a[i][i])

b.mul(i,ksm(a.a[i][i],p-2));a.mul(i,ksm(a.a[i][i],p-2));//

把所有項除a[i][i] 變成a[i][i]變成1

for(int j=1;j<=n;j++)

}}int

main()

posted @

2019-03-03 20:45

1436177712 閱讀(

...)

編輯收藏

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 2 n n times 2 n n 2 n 的矩陣,左半部分為給定矩陣,右半部分為單位矩陣,進行高斯消元 在取模意義下,除法轉化為乘以乘法逆元,模數是質數,逆元用費馬小定理加快速冪求即可。include include using namespace std inline int...

求逆矩陣 模板 洛谷P4783

模板題目 輸入乙個n n的矩陣,若可逆,求其逆矩陣。include using namespace std const int maxn 405 const int mod 1e9 7 int n struct matrix int operator int x void swap int x,in...