Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में अकेला पिक्सेल II

मान लीजिए कि हमारे पास ब्लैक एंड व्हाइट पिक्सल से युक्त एक तस्वीर है, हमें ब्लैक पिक्सल की संख्या का पता लगाना है, जो पंक्ति आर और कॉलम सी में मौजूद हैं। यह निम्नलिखित सभी नियमों के साथ संरेखित है -

  • R और C में बिल्कुल N ब्लैक पिक्सेल होंगे

  • उन सभी पंक्तियों के लिए, जिनका स्तंभ C पर एक काला पिक्सेल है, वे बिल्कुल पंक्ति R के समान होनी चाहिए।

यहां चित्र को 2डी चार सरणी द्वारा दर्शाया गया है जिसमें क्रमशः ब्लैक एंड व्हाइट पिक्सल के लिए 'बी' और 'डब्ल्यू' शामिल हैं।

अगर इनपुट इस तरह है -

W बी डब्ल्यू बी बी डब्ल्यू
W बी डब्ल्यू बी बी डब्ल्यू
W बी डब्ल्यू बी बी डब्ल्यू
W डब्ल्यू बी डब्ल्यू बी डब्ल्यू

और एन =3, तो आउटपुट 6 होगा। क्योंकि सभी बोल्ड 'बी' ब्लैक पिक्सल हैं, सभी 'बी' कॉलम 1 और 3 पर हैं। अब अगर हम 'बी' को पंक्ति आर =0 और कॉलम सी =1 पर लेते हैं। तो उदाहरण के लिए:नियम 1, पंक्ति आर =0 और कॉलम सी =1 दोनों में बिल्कुल एन 'बी' पिक्सेल हैं। और नियम 2, पंक्तियों में कॉलम C =1 पर 'B' पिक्सेल है, पंक्ति 0, पंक्ति 1 और पंक्ति 2 हैं। वे बिल्कुल पंक्ति R =0 के समान हैं।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • रिट:=0

  • एक मानचित्र और दूसरे मानचित्र को परिभाषित करें c

  • n :=p की पंक्ति गणना, m :=p की स्तंभ संख्या

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • इनिशियलाइज़ j :=0 के लिए, जब j

      • यदि p[i, j] 'B' के समान है, तो -

        • r[i]

          . में j डालें
        • c[j]

          . में i डालें
  • इनिशियलाइज़ i :=0 के लिए, जब i

    • इनिशियलाइज़ j :=0 के लिए, जब j

      • यदि p[i, j] 'B' के समान है और r[i] का आकार N के समान है और c[j] का आकार N के समान है, तो -

        • ठीक :=सच

        • c[j] में प्रत्येक x के लिए, करें

          • यदि r[x], r[i] के बराबर नहीं है, तो -

            • ठीक :=असत्य

            • लूप से बाहर आएं

        • रिट:=रिट + ओके

  • वापसी रिट

उदाहरण (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++

    C++ में स्विच स्टेटमेंट का उपयोग कैसे करें सशर्त बयान सभी प्रोग्रामिंग भाषाओं की एक सामान्य विशेषता है। इन कथनों का उपयोग किसी प्रोग्राम के प्रवाह को नियंत्रित करने और यह निर्दिष्ट करने के लिए किया जाता है कि कोड के विशिष्ट ब्लॉक कब निष्पादित किए जाने चाहिए। C++ में उपयोग किए जाने वाले मुख्य कंडीश

  1. C++ में मितव्ययी संख्या

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया जाता है। हमारा कार्य यह जाँचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या - एक संख्या जिसके अंकों की संख्या दी गई संख्या के अभाज्य गुणनखंड में अंकों की संख्या से अधिक है। उदाहरण − 625, संख्या 625 का अभाज्

  1. सी++ पेंटाटोप नंबर

    पास्कल के त्रिभुज में एक पंचकोण संख्या को पाँचवीं संख्या के रूप में वर्णित किया गया है। अब, जैसा कि आप जानते हैं, यह पांचवीं संख्या है, तो इसका मतलब है कि हमारे पास पास्कल के त्रिकोण में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है। पास्कल त्रिभुज की