কম্পিউটার

C++ এ একটি ম্যাট্রিক্সে বিজোড় মান সহ কক্ষ


ধরুন n এবং m আছে যা একটি ম্যাট্রিক্সের মাত্রা। এই শূন্য দ্বারা আরম্ভ করা হয়. এবং সূচকগুলি দেওয়া হয় যেখানে সূচক [i] =[ri, ci]। [ri, ci] এর প্রতিটি জোড়ার জন্য আমাদের সারি ri এবং কলাম ci-এর সমস্ত কক্ষকে 1 দ্বারা বৃদ্ধি করতে হবে। আউটপুটটি সমস্ত সূচকে বৃদ্ধি প্রয়োগ করার পরে ম্যাট্রিক্সে বিজোড় মান সহ কক্ষের সংখ্যা হবে।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • বিজোড় শুরু করুন :=0, এবং x :=ম্যাট্রিক্সের সারি গণনা
  • একটি ম্যাট্রিক্স ম্যাট তৈরি করুন
  • আমি 0 থেকে x
      পরিসরে
    • r =ইনপুট[i, 0], c =ইনপুট[i, 1],
    • j-এর জন্য 0 থেকে m – 1
      • mat[r, j] :=mat[r, j] + 1
    • 0 থেকে n – 1
        পরিসরে j এর জন্য
      • mat[j, c] :=mat[j, c] + 1
  • আমি 0 থেকে n – 1
      পরিসরে
    • j এর জন্য :=0 থেকে m – 1
      • বিজোড় :=odd + mat[i, j] bitwise অথবা 1 দিয়ে
  • বিজোড় রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
      int oddCells(int n, int m, vector<vector<int>>& in) {
      int odd = 0;
      int x = in.size();
      vector < vector <int> > mat(n, vector <int>(m));
      for(int i = 0; i < x ;i++){
         int r = in[i][0];
         int c = in[i][1];
         for(int j = 0; j < m; j++){
            mat[r][j]++;
         }
         for(int j = 0; j < n; j++){
            mat[j][c]++;
         }
      }
      for(int i = 0; i < n; i++){
         for(int j = 0; j < m; j++)odd += mat[i][j] & 1;
      }
      return odd;
   }
};
main(){
   Solution ob;
   vector<vector<int>> c = {{0,1},{1,1}};
   cout << ob.oddCells(2,3,c);
}

ইনপুট

2
3
{{0,1},{1,1}}

আউটপুট

6

  1. C++ এ স্পাইরাল ম্যাট্রিক্স III

  2. C++ ব্যবহার করে ম্যাট্রিক্সে সর্বোচ্চ যোগফল সহ কলাম খুঁজুন।

  3. প্রদত্ত পণ্যের সাথে একটি জোড়া C++ এ ম্যাট্রিক্সে বিদ্যমান কিনা তা পরীক্ষা করুন

  4. একটি ম্যাট্রিক্স C++ এ ইনভার্টেবল কিনা তা পরীক্ষা করুন