Matrix Equation
生活随笔
收集整理的這篇文章主要介紹了
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P3389 【模板】高斯消元法
- 下一篇: 多体问题