কম্পিউটার

C++ এ ম্যাট্রিক্স ফ্লিপ করার পর স্কোর


ধরুন আমাদের একটি দ্বিমাত্রিক ম্যাট্রিক্স A আছে যেখানে প্রতিটি মান 0 বা 1। এখানে একটি পদক্ষেপের মধ্যে রয়েছে যেকোনো সারি বা কলাম বেছে নেওয়া এবং সেই সারি বা কলামের প্রতিটি মান টগল করা:সমস্ত 0s থেকে 1s, এবং সমস্ত 1s থেকে 0s পরিবর্তন করা। এখন যেকোন সংখ্যক চাল করার পরে, এই ম্যাট্রিক্সের প্রতিটি সারিকে একটি বাইনারি সংখ্যা হিসাবে ব্যাখ্যা করা হয় এবং ম্যাট্রিক্সের স্কোর হল এই সংখ্যাগুলির যোগফল। তাই আমাদের কাজ হল সর্বোচ্চ সম্ভাব্য স্কোর খুঁজে বের করা। যদি ইনপুট −

এর মত হয়
0 0 1 1
1 0 1 0
1 1 0 0

আউটপুট হবে 39 যেমন টগল করার পরে, ম্যাট্রিক্স হবে −

1 1 1 1
1 0 0 1
1 1 1 1

সুতরাং সংখ্যাগুলি হল 15 + 9 + 15 =39

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

  • n :=সারি গণনা এবং m :=কলাম গণনা

  • ret :=n x (2^(m – 1))

  • j এর জন্য 1 থেকে m – 1

    পরিসরে
    • cnt :=0

    • 0 থেকে n – 1

      রেঞ্জের i জন্য
      • cnt :=cnt + A[i, j] =A[i, 0]

    • temp :=2^(m – j – 1) * সর্বাধিক cnt এবং n – cnt

    • ret :=ret + temp

  • রিটার্ন রিটার্ন

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int matrixScore(vector<vector<int>>& A) {
      int n = A.size();
      int m = A[0].size();
      int ret = (1 << (m - 1)) * n;
      for(int j = 1; j < m; j++){
         int cnt = 0;
         for(int i = 0; i < n; i++){
            cnt += (A[i][j] == A[i][0]);
         }
         int temp = ((1 << (m - (j + 1))) * max(cnt, n - cnt));
         ret += temp;
      }
      return ret;
   }
};
main(){
   vector<vector<int>> v = {{0,0,1,1},{1,0,1,0},{1,1,0,0}};
   Solution ob;
   cout << (ob.matrixScore(v));
}

ইনপুট

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

আউটপুট

39

  1. C++ এ ম্যাট্রিক্সের সারি-ভিত্তিক বনাম কলাম-ভিত্তিক ট্রাভার্সাল

  2. C++ এ T সেকেন্ডের পর ব্যাঙের অবস্থান

  3. C++ তে বিসিমেট্রিক ম্যাট্রিক্স?

  4. C++ এ একটি বুলিয়ান ম্যাট্রিক্স প্রশ্ন?