কম্পিউটার

C++ এ লোনলি পিক্সেল II


ধরুন আমাদের কাছে কালো এবং সাদা পিক্সেল সমন্বিত একটি ছবি আছে, আমাদেরকে ব্ল্যাক পিক্সেলের সংখ্যা খুঁজে বের করতে হবে, যেটি সারি R এবং কলাম C-তে উপস্থিত রয়েছে। এটি নিম্নলিখিত সমস্ত নিয়মের সাথে সারিবদ্ধ -

  • R এবং C-তে ঠিক N কালো পিক্সেল থাকবে

  • সমস্ত সারির জন্য, যার কলাম C-তে একটি কালো পিক্সেল আছে, সেগুলি সারি R-এর মতোই হওয়া উচিত।

এখানে চিত্রটি কালো এবং সাদা পিক্সেলের জন্য যথাক্রমে 'B' এবং 'W' সমন্বিত একটি 2D অক্ষর বিন্যাস দ্বারা উপস্থাপন করা হয়েছে।

যদি ইনপুট −

এর মত হয়
W B W B B W
W B W B B W
W B W B B W
W W B W B W

এবং N =3, তাহলে আউটপুট হবে 6। কারণ সমস্ত বোল্ড 'B' হল কালো পিক্সেল সবগুলি 'B' কলাম 1 এবং 3-এ। এখন যদি আমরা 'B' সারিতে R =0 এবং কলাম C =1 নিই। তাই একটি উদাহরণের জন্য:নিয়ম 1, সারি R =0 এবং কলাম C =1 উভয়েরই ঠিক N 'B' পিক্সেল রয়েছে। এবং নিয়ম 2, কলাম C =1 এ সারিগুলির ‘B’ পিক্সেল রয়েছে সারি 0, সারি 1 এবং সারি 2৷ এগুলি ঠিক R =0 সারির মতো৷

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

  • ret :=0

  • একটি মানচিত্র এবং অন্য মানচিত্র c

    সংজ্ঞায়িত করুন
  • n :=p এর সারি গণনা, m :=p এর কলাম গণনা

  • আরম্ভ করার জন্য i :=0, যখন i

    • j শুরু করার জন্য :=0, যখন j করুন

      • যদি p[i, j] 'B' এর মত হয়, তাহলে −

        • r[i]

          -এ j ঢোকান
        • c[j]

          এ ঢোকান
  • আরম্ভ করার জন্য i :=0, যখন i

    • j শুরু করার জন্য :=0, যখন j

      • যদি p[i, j] 'B'-এর সমান হয় এবং r[i]-এর আকার N-এর মতো হয় এবং c[j]-এর আকার N-এর মতো হয়, তাহলে −

        • ঠিক আছে :=সত্য

        • প্রতিটি x এর জন্য c[j], do

          • যদি r[x] r[i] এর সমান না হয়, তাহলে −

            • ঠিক আছে :=মিথ্যা

            • লুপ থেকে বেরিয়ে আসুন

        • ret :=ret + ok

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

উদাহরণ (C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int findBlackPixel(vector<vector<char>>& p, int N) {
      int ret = 0;
      unordered_map <int, set <int> > r, c;
      int n = p.size();
      int m = p[0].size();
      for(int i = 0; i < n; i++){
         for(int j = 0; j < m; j++){
            if(p[i][j] == 'B'){
               r[i].insert(j);
               c[j].insert(i);
            }
         }
      }
      for(int i = 0; i < n; i++){
         for(int j = 0; j < m && r.count(i); j++){
            if(p[i][j] == 'B' && r[i].size() == N && c[j].size() == N){
               bool ok = true;
               for(auto& x : c[j]){
                  if(r[x] != r[i]){
                     ok = false;
                     break;
                  }
               }
               ret += ok;
            }
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<char>> v = {{'W','B','W','B','B','W'},{'W','B','W','B','B','W'},{'W','B','W','B' ,'B','W'},{'W','W','B','W','B','W'}};
   cout << (ob.findBlackPixel(v, 3));
}

ইনপুট

{{'W','B','W','B','B','W'},{'W','B','W','B','B','W'},{'W','B','W','B' ,'B','W'},{'W','W','B','W','B','W'}}, 3

আউটপুট

6

  1. C++ Enum

  2. বিবৃতি সি++ পরিবর্তন করুন

  3. C++ এ মিতব্যয়ী নম্বর

  4. C++ পেন্টাটোপ নম্বর