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

C++ में कुल हैमिंग दूरी (Total Hamming Distance)


समस्या विवरण

संख्याओं की एक सूची दी गई है। हमें सभी जोड़ों (pairs) की हैमिंग दूरी (Hamming distance) का योग ज्ञात करना है। दो पूर्णांकों के बीच हैमिंग दूरी उन बिट स्थितियों की संख्या है जहां संबंधित बिट्स भिन्न होते हैं।

उदाहरण

इनपुट

[4, 14, 17, 2]

आउटपुट

17

समाधान दृष्टिकोण (बिट मैनिपुलेशन)

प्रत्येक बिट स्थिति (0 से 31) के लिए स्वतंत्र रूप से गणना करें:

  • उस बिट पर सेट बिट्स (1s) की संख्या गिनें: count1
  • अनसेट बिट्स (0s) की संख्या: count0 = n - count1
  • उस बिट का कुल योगदान: count1 × count0
  • सभी 32 बिट्स के लिए योग करें।

समय जटिलता: O(32 × n) = O(n)

कार्यकारी प्रोग्राम

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
const int MOD = 1e9 + 7;

class Solution {
public:
    lli add(lli a, lli b) { return ((a % MOD) + (b % MOD)) % MOD; }
    lli mul(lli a, lli b) { return ((a % MOD) * (b % MOD)) % MOD; }
    
    int totalHammingDistance(vector<int>& nums) {
        vector<vector<lli>> bits(32, vector<lli>(2, 0));
        lli ans = 0;
        int n = nums.size();
        
        for (int i = 0; i < n; i++) {
            lli x = nums[i];
            for (lli j = 0; j < 32; j++) {
                lli b = (x >> j) & 1;
                ans = add(ans, mul(1, bits[j][!b]));
                bits[j][b] = add(bits[j][b], 1);
            }
        }
        return ans;
    }
};

int main() {
    Solution ob;
    vector<int> v = {4, 14, 17, 2};
    cout << ob.totalHammingDistance(v);
    return 0;
}

आउटपुट

17
  1. - C++ कोड: मैट्रिक्स में कुल तत्व खोजें

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

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

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

  1. C++ में कुल n बिंदुओं और m संरेखीय बिंदुओं वाले त्रिभुजों की गिनती C++ में कुल n बिंदुओं और m संरेखीय बिंदुओं वाले त्रिभुजों की गिनती

    हमें दो चर n और m दिए गए हैं जो 2D तल पर बिंदुओं की संख्या दर्शाते हैं। n बिंदुओं में से, m बिंदु संरेखीय (collinear) हैं। लक्ष्य इन n बिंदुओं का उपयोग करके बनने वाले त्रिभुजों की संख्या ढूंढना है। संरेखीय बिंदु (Collinear points) - वे बिंदु जो एक ही रेखा पर होते हैं उन्हें संरेखीय कहा जाता है। बि