ধরুন আমাদের কাছে কালো এবং সাদা পিক্সেল সমন্বিত একটি ছবি আছে, আমাদেরকে ব্ল্যাক পিক্সেলের সংখ্যা খুঁজে বের করতে হবে, যেটি সারি 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