Saltar al contenido

Encuentre la matriz original de la matriz AND dada

 

#include <bits/stdc++.h>

using namespace std;

 

void solve(vector<vector<bool> >& arr)

{

    int n = arr.size();

    int m = arr[0].size();

 

    set<int> row;

    set<int> col;

 

    vector<vector<bool> > original(arr);

 

    

    

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < m; j++) {

            if (arr[i][j]) {

                row.insert(i);

                col.insert(j);

            }

        }

    }

 

    

    for (auto it : row) {

        for (int i = 0; i < m; i++) {

            arr[it][i] = 1;

        }

    }

 

    

    for (auto it : col) {

        for (int i = 0; i < n; i++) {

            arr[i][it] = 1;

        }

    }

 

    vector<vector<bool> > result(arr);

 

    row.clear();

    col.clear();

 

    

    

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < m; j++) {

            if (!arr[i][j]) {

                row.insert(i);

                col.insert(j);

            }

        }

    }

 

    

    for (auto it : row) {

        for (int i = 0; i < m; i++) {

            arr[it][i] = 0;

        }

    }

 

    

    for (auto it : col) {

        for (int i = 0; i < n; i++) {

            arr[i][it] = 0;

        }

    }

 

    

    

    if (arr != original) {

        cout << -1 << endl;

    }

 

    

    else {

        for (int i = 0; i < n; i++) {

            for (int j = 0; j < m; j++) {

                cout << result[i][j] << " ";

            }

            cout << endl;

        }

    }

}

 

int main()

{

 

    vector<vector<bool> > v = { { 1, 0, 1 }, { 0, 0, 0 } };

 

    solve(v);

 

    return 0;

}