求乙個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時)特判輸出就行哩
#includeusingnamespace
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...