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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matrix Equation

發(fā)布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matrix Equation 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:

題目給出兩個矩陣X,Y,現(xiàn)在有兩種操作
Z = X × Y
D = X⊙Y

問是否存在一個矩陣C,使得A×C=B⊙C式子成立,問矩陣C能有多少個

題解:


這個式子在模2意義下的加法就等于異或
也就相當于

那現(xiàn)在有

將BC移到左邊

然后將Ci,j的系數(shù)進行合并得到:

aik =Aik

A i,i = = B i,j時,A i,i xor B i,j = 0,ai,i = 0
?A i,i != B i,j時,ai,i = 1
矩陣C是列獨立的,所以我們每次對Ci,j列出的向量只涉及第j列中未知數(shù)Cij
2^自由元總數(shù)即為答案個數(shù)。

代碼:

#include <bits/stdc++.h> using namespace std; const int N=210; int a[N][N];//增廣矩陣 int x[N];//解集 int freeX[N];//自由變元 // equ:方程個數(shù) var:變量個數(shù) int Gauss(int equ,int var){//返回自由變元個數(shù)/*初始化*/for(int i=0;i<=var;i++){x[i]=0;freeX[i]=0;}/*轉(zhuǎn)換為階梯陣*/int col=0;//當前處理的列int num=0;//自由變元的序號int k;//當前處理的行for(k=0;k<equ&&col<var;k++,col++){//枚舉當前處理的行int maxr=k;//當前列絕對值最大的行for(int i=k+1;i<equ;i++){//尋找當前列絕對值最大的行if(a[i][col]>a[maxr][col]){maxr=i;swap(a[k],a[maxr]);//與第k行交換break;}}if(a[k][col]==0){//col列第k行以下全是0,處理當前行的下一列freeX[num++]=col;//記錄自由變元k--;continue;}for(int i=k+1;i<equ;i++){if(a[i][col]!=0){for(int j=col;j<var+1;j++){//對于下面出現(xiàn)該列中有1的行,需要把1消掉a[i][j]^=a[k][j];}}}}/*求解*///無解:化簡的增廣陣中存在(0,0,...,a)這樣的行,且a!=0for(int i=k;i<equ;i++)if(a[i][col]!=0)return -1;//無窮解: 在var*(var+1)的增廣陣中出現(xiàn)(0,0,...,0)這樣的行if(k<var)//返回自由變元數(shù)return var-k;//自由變元有var-k個//唯一解: 在var*(var+1)的增廣陣中形成嚴格的上三角陣for(int i=var-1;i>=0;i--){//計算解集x[i]=a[i][var];for(int j=i+1;j<var;j++)x[i]^=(a[i][j]&&x[j]);}return 0; }void testf(){for(int i=0;i<3;i++){for(int j=0;j<3;j++){cin>>a[i][j];}}cout<<Gauss(3,3);exit(0); }int A[N][N]; int B[N][N]; const long long MOD=998244353; int main(){//testf();ios::sync_with_stdio(0);int n;cin>>n;for(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>A[i][j];}}for(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>B[i][j];}}long long ans_cnt=0;for(int j=0;j<n;j++){for(int i=0;i<n;i++){for(int k=0;k<n;k++){a[i][k]=A[i][k];}a[i][n]=0;a[i][i]=(A[i][i]==B[i][j]?0:1);}int cnt=Gauss(n,n);if(cnt>0){ans_cnt+=cnt;}else if(cnt<0){cout<<0;return 0;}}long long ans=1;while(ans_cnt--){ans<<=1;ans%=MOD;}cout<<ans;return 0; }

總結(jié)

以上是生活随笔為你收集整理的Matrix Equation的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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