日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

2021“MINIEYE杯”中国大学生算法设计超级联赛(5)Random Walk 2(推式子+矩阵逆+矩阵乘)

發(fā)布時(shí)間:2023/12/3 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021“MINIEYE杯”中国大学生算法设计超级联赛(5)Random Walk 2(推式子+矩阵逆+矩阵乘) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Random Walk 2

【2.4】Gauss-Jordan消元法求矩陣的逆
高斯消元求矩陣的逆,伴隨單位矩陣一起消元即可。
[A,I]→[I,A?1][\text A,\text I]\to [\text I,\text A^{-1}][A,I][I,A?1]



移項(xiàng)變形,后就是個(gè)矩陣的逆,為啥賽時(shí)不寫(xiě)???草(一種植物)

#include<bits/stdc++.h> using namespace std; using ll=long long; const ll mod=998244353; const int N=310; int W[N][N]; ll P[N][N],P0[N][N]; ll I[N][N],A[N][N]; int n; ll qmi(ll a,ll b) {ll v=1;while(b){if(b&1) v=v*a%mod;b>>=1;a=a*a%mod;}return v; } void Inv() {for(int c=1,r=1;c<=n;c++){int t=r;for(int i=c;i<=n;i++)if(abs(P[i][c])>abs(P[t][c])) t=i;if(P[t][c]==0) continue;for(int j=1;j<=n;j++) {swap(I[t][j],I[r][j]);swap(P[t][j],P[r][j]);}ll inv=qmi(P[r][c],mod-2);for(int j=1;j<=n;j++){I[r][j]=I[r][j]*inv%mod;P[r][j]=P[r][j]*inv%mod;}for(int i=1;i<=n;i++)if(i!=r&&P[i][c]!=0){ll v=P[i][c];for(int j=1;j<=n;j++){I[i][j]=(I[i][j]-v*I[r][j]%mod+mod)%mod;P[i][j]=(P[i][j]-v*P[r][j]%mod+mod)%mod;}}r++;}} void Mul() // I-1 × P0 {for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) A[i][j]=0;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) A[i][j]=(A[i][j]+I[i][k]*P0[k][j]%mod)%mod; } int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int Tc=1;cin>>Tc;while(Tc--){cin>>n;for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>W[i][j];for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) P[i][j]=P0[i][j]=0,I[i][j]=(i==j);for(int i=1;i<=n;i++){ll tot=0;for(int j=1;j<=n;j++) tot+=W[i][j];ll inv=qmi(tot,mod-2);for(int j=1;j<=n;j++){if(i!=j) P[i][j]=1ll*W[i][j]*inv%mod;else P0[i][j]=1ll*W[i][j]*inv%mod;}for(int j=1;j<=n;j++){P[i][j]=mod-P[i][j];if(i==j) P[i][j]=1;}}Inv();Mul();for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cout<<A[i][j]<<" \n"[j==n];}return 0; }

總結(jié)

以上是生活随笔為你收集整理的2021“MINIEYE杯”中国大学生算法设计超级联赛(5)Random Walk 2(推式子+矩阵逆+矩阵乘)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。