Description

已知一个 \(n×m\) 的矩阵,每行每列元素的异或和,请构造一个满足要求的矩阵。若不存在,输出"NO",否则输出"YES"和矩阵。
$ n,m \leq 100 $

Solution

将前 \((n-1)(m-1)\) 设为 \(0\),只通过最后一个 \(L\) 型来构造

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 105;

int n,m,a[N],b[N],s[N][N];

signed main() {
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=m;i++) cin>>b[i];
    for(int i=1;i<n;i++) s[i][m]=a[i];
    for(int i=1;i<=m;i++) s[n][i]=b[i];
    for(int i=1;i<n;i++) s[n][m]^=a[i];
    int sum=0;
    for(int i=1;i<=m;i++) sum^=s[n][i];
    if(sum-a[n]) {
        cout<<"NO";
    }
    else {
        cout<<"YES"<<endl;
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=m;j++) cout<<s[i][j]<<" ";
            cout<<endl;
        }
    }
}

相关文章: