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

C++ . में कुल हैमिंग दूरी

मान लीजिए हमारे पास संख्याओं की एक सूची है। हमें दी गई संख्याओं के सभी युग्मों की हैमिंग दूरी ज्ञात करनी है। हम जानते हैं कि दो पूर्णांकों के बीच हैमिंग की दूरी उन स्थितियों की संख्या है, जिन पर संगत बिट भिन्न होते हैं।

तो, अगर इनपुट [4,14,17,2] जैसा है, तो आउटपुट 17 होगा।

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

  • मी :=1^9 + 7

  • फ़ंक्शन ऐड () को परिभाषित करें, इसमें a, b,

    . लगेगा
  • वापसी ((एक मॉड एम) + (बी मॉड एम))

  • फ़ंक्शन mul() को परिभाषित करें, इसमें a, b,

    . लगेगा
  • वापसी ((एक मॉड एम) * (बी मॉड एम))

  • फ़ंक्शन को परिभाषित करें cntBits(), यह एक सरणी लेगा,

  • 32 x 2 आकार के एक 2D सरणी बिट्स को परिभाषित करें

  • उत्तर:=0, n:=आकार एक

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

    • एक्स:=ए[i]

    • इनिशियलाइज़ j :=0 के लिए, जब j <32, अपडेट करें (j को 1 से बढ़ाएँ), करें -

      • बी:=(एक्स / 2^जे) और 1

      • Ans :=add(ans, mul(1, bit[j, inverse of b]))

      • बिट्स [जे, बी]:=जोड़ें (बिट्स [जे, बी], 1)

  • वापसी उत्तर

  • मुख्य विधि से निम्न कार्य करें -

  • वापसी cntBits(अंक)

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
const int m = 1e9 + 7;
class Solution {
   public:
   lli add(lli a, lli b){
      return ((a % m) + (b % m));
   }
   lli mul(lli a, lli b){
      return ((a % m) * (b % m));
   }
   int cntBits(vector<int>& a){
      vector<vector<lli> > bits(32, vector<lli>(2));
      lli ans = 0;
      int n = a.size();
      for (int i = 0; i < n; i++) {
         lli x = a[i];
         for (lli j = 0; j < 32; j++) {
            lli b = (x >> j) & 1;
            ans = add(ans, mul((lli)1, bits[j][!b]));
            bits[j][b] = add(bits[j][b], (lli)1);
         }
      }
      return ans;
   }
   int totalHammingDistance(vector<int>& nums){
      return cntBits(nums);
   }
};
main(){
   Solution ob;
   vector<int> v = {4,14,17,2};
   cout << (ob.totalHammingDistance(v));
}

इनपुट

{4,14,17,2}

आउटपुट

17

  1. मैट्रिक्स में कुल तत्वों को खोजने के लिए सी ++ कोड

    मान लीजिए, हमें n पंक्तियों और m स्तंभों का एक मैट्रिक्स दिया गया है। हमें इसमें मौजूद तत्वों की संख्या का पता लगाना है। हम मूल्य का पता लगाते हैं और इसे आउटपुट के रूप में प्रदर्शित करते हैं। इसलिए, यदि इनपुट n =20, m =15 जैसा है, तो आउटपुट 300 होगा। कदम इसे हल करने के लिए, हम इन चरणों का पालन करे

  1. C++ में K दूरी पर बनाने के लिए पहले N नंबरों को पुनर्व्यवस्थित करें

    हमें पूर्णांक चर दिए गए हैं, मान लीजिए, N और K। कार्य पहले N के क्रमपरिवर्तन की गणना करना है और फिर क्रमचय को इस तरह से पुनर्व्यवस्थित करना है कि यह प्रत्येक तत्व से K दूरी हो। आइए इसके लिए विभिन्न इनपुट आउटपुट परिदृश्य देखें - इनपुट - इंट एन =20, इंट के =2 आउटपुट - पहली N संख्याओं को K दूरी पर

  1. C++ में कुल n अंक के साथ m कोलिनियर वाले त्रिभुजों की संख्या

    हमें दो चर n और m दिए गए हैं जो एक 2D तल पर बिंदुओं की संख्या को निरूपित करते हैं। n बिंदुओं में से, m बिंदु संरेख हैं। लक्ष्य इन n बिंदुओं का उपयोग करके बनाए जा सकने वाले त्रिभुजों की संख्या ज्ञात करना है। समरेख बिंदु - एक ही रेखा पर स्थित बिंदु संरेख कहलाते हैं। बिंदु A और B संरेख हैं। दिया गय