কম্পিউটার টিউটোরিয়াল

C++-এ ২-রো বাইনারি ম্যাট্রিক্স পুনর্নির্মাণ


n কলাম আর ২ রোয়ালা একটি ম্যাট্রিক্সের বিবরণ দেওয়া আছে:

  • ম্যাট্রিক্সের উপাদান হবে ০ বা ১।
  • ০-ম (উপরের) রোর উপাদানগুলোর যোগফল upper।
  • ১-ম (নিচের) রোর উপাদানগুলোর যোগফল lower।
  • i-তম কলামের (০-ইন্ডেক্সড) উপাদানগুলোর যোগফল colsum[i], যেখানে colsum দিয়ে আকার n-র একটি পূর্ণসংখ্যা অ্যারে।

এই ম্যাট্রিক্সটি upper, lower আর colsum দিয়ে পুনর্নির্মাণ করতে হবে। একটি বৈধ সমাধান থাকলে যেকোনো একটি গ্রহণযোগ্য। সমাধান না থাকলে খালি ২D অ্যারে ফেরত দিন। উদাহরণস্বরূপ, upper = 2, lower = 3, colsum = [1,1,1] হলে আউটপুট [[1,1,0],[0,0,1]]।

সমাধানের ধাপগুলো:

  • flag := true, n := c.size(), আকার 2 x n-এর একটি অ্যারে ans বানান।
  • i = 0 থেকে n-1 পর্যন্ত:
    • যদি c[i] = 2 হয়:
      • u আর l ১ করে কমান।
      • যদি u < 0 বা l < 0 হয়, flag := false।
      • ans[0][i] = 1 আর ans[1][i] = 1।
    • অন্যथा যদি c[i] = 1 হয়:
      • যদি u > l হয়, u ১ কমিয়ে ans[0][i] := 1।
      • অন্যथा যদি u < l হয়, l ১ কমিয়ে ans[1][i] := 1।
      • অন্যथा (যদি u == l):
        • যদি u > 0 হয়, u ১ কমিয়ে ans[0][i] := 1।
        • অন্যथा যদি l > 0 হয়, l ১ কমিয়ে ans[1][i] := 1।
        • অন্যथा flag := false।
    • অন্যथा যদি c[i] = 0 হয়:
      • যদি c[i] > 0 হয়, flag := false।
    • অন্যथा flag := false।
  • যদি flag false হয় অথবা u != 0 অথবা l != 0, তবে খালি অ্যারে ফেরত দিন।
  • ans ফেরত দিন।

নিচের ইমপ্লিমেন্টেশনটি দেখুন:

উদাহরণ

#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<auto> > v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << "[";       for(int j = 0; j <v[i].size(); j++){          cout << v[i][j] << ", ";       }       cout << "],";    }    cout << "]"<<endl; } class Solution {    public:    vector<vector<int>> reconstructMatrix(int u, int l, vector<int>& c) {       bool flag = true;       int n = c.size();       vector < vector <int> > ans(2, vector <int> (n));       for(int i = 0; i < n; i++){          if(c[i] == 2){             u--;             l--;             if(u<0 || l<0)flag = false;             ans[0][i] = 1;             ans[1][i] = 1;          }else if(c[i] == 1){             if(u>l){                   u--;                   ans[0][i] = 1;             }else if(u<l){                l--;                ans[1][i] = 1;             }else{                if(u>0){                   u--;                   ans[0][i] = 1;                }else if(l > 0){                   l--;                   ans[1][i] = 1;                }else                   flag = false;             }            }else if(c[i] == 0){          if(c[i]>0)flag = false;          }else{             flag = false;          }       }       if(!flag || u!=0 ||l!=0 )return {};       return ans;    } }; main(){    vector<int> v = {1,1,1};    Solution ob;    print_vector(ob.reconstructMatrix(2,1,v)); }

ইনপুট

2 1 [1,1,1]

আউটপুট

[[1, 1, 0, ],[0, 0, 1, ],]

  1. সি++-এ বাইনারি ম্যাট্রিক্সকে শূন্য ম্যাট্রিক্সে রূপান্তর করার জন্য ন্যূনতম ফ্লিপ সংখ্যা

  2. C++-এ বাইনারি ট্রি প্রিন্ট করা

  3. বাইনারি ট্রি প্রুনিং C++-এ

  4. C++-এ একটি ম্যাট্রিক্স বাইনারি ম্যাট্রিক্স কিনা তা যাচাই করার প্রোগ্রাম