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

उन उप-सरणियों की गणना जिनके तत्वों को पुनर्व्यवस्थित करके पालिंड्रोम बनाया जा सके - C++ प्रोग्राम

समस्या विवरण

हमें एक पूर्णांक ऐरे दिया गया है। लक्ष्य उन उप-सरणियों की गणना करना है जिनके तत्वों को पुनर्व्यवस्थित करके एक वैध पालिंड्रोम बनाया जा सके। पालिंड्रोम वे अनुक्रम होते हैं जो शुरुआत और अंत से समान पढ़े जाते हैं।

उदाहरण

इनपुट: arr[] = {3, 3, 1, 4, 2, 1, 5}

आउटपुट: 9

व्याख्या: वैध उप-सरणियाँ: {3}, {3}, {1}, {4}, {2}, {1}, {5}, {1,2,1}, {1,3,1}। कुल 9।

इनपुट: arr[] = {2, 5, 5, 2, 1}

आउटपुट: 8

व्याख्या: वैध उप-सरणियाँ: {2}, {5}, {5}, {2}, {1}, {5,2,5}, {2,5,2}, {2,5,5,2}। कुल 8।

दृष्टिकोण

एक उप-सरणी को पालिंड्रोम में पुनर्व्यवस्थित किया जा सकता है यदि अधिकतम एक तत्व की आवृत्ति विषम हो। हम बिटमास्क का उपयोग करके प्रत्येक उप-सरणी के लिए विषम आवृत्तियों की समता को ट्रैक करते हैं।

  • प्रत्येक मान arr[j] के लिए बिट arr[j] को टॉगल करें (XOR ऑपरेशन)
  • यदि परिणाम 0 है (सभी आवृत्तियाँ सम) या केवल एक बिट सेट है (एक विषम आवृत्ति), तो यह वैध है
  • check(x) फंक्शन जाँचता है कि x & (x-1) == 0 (अधिकतम एक बिट सेट)

एल्गोरिदम

  1. प्रारंभिक count = 0
  2. प्रत्येक प्रारंभिक इंडेक्स i के लिए:
    • temp = 0 (बिटमास्क)
    • प्रत्येक अंतिम इंडेक्स j >= i के लिए:
      • val = 1LL << arr[j]
      • temp ^= val
      • यदि temp == 0 || check(temp) तो count++
  3. count लौटाएँ

C++ कार्यान्वयन

#include <bits/stdc++.h>
using namespace std;

bool check(long long mask) {
    return (mask & (mask - 1)) == 0;
}

int palindromes_rearrange(int arr[], int size) {
    int count = 0;
    for (int i = 0; i < size; i++) {
        long long temp = 0;
        for (int j = i; j < size; j++) {
            long long val = 1LL << arr[j];
            temp ^= val;
            if (temp == 0 || check(temp)) count++;
        }
    }
    return count;
}

int main() {
    int arr[] = {3, 3, 1, 4, 2, 1, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    cout << "Count: " << palindromes_rearrange(arr, size);
    return 0;
}

आउटपुट

Count: 9
  1. C++ में तल में समानांतर चतुर्भुजों की गणना C++ में तल में समानांतर चतुर्भुजों की गणना

    हमें एक तल दिया गया है जिसमें समानांतर चतुर्भुज बनाने वाले बिंदु हैं और कार्य दिए गए बिंदुओं का उपयोग करके बनने वाले समानांतर चतुर्भुजों की संख्या की गणना करना है। समानांतर चतुर्भुज में एक चतुर्भुज की विपरीत भुजाएँ समानांतर होती हैं और इसलिए विपरीत कोण समान होते हैं। इनपुट - int a[] = {0, 2, 5, 5,

  1. - C++ में सॉर्टेड ऐरे में छोटे एलिमेंट्स गिनें

    इस ट्यूटोरियल में, हम C++ में सॉर्टेड ऐरे में छोटे एलिमेंट्स गिनने वाले प्रोग्राम पर चर्चा करेंगे।इसमें हमें एक नंबर दिया जाएगा और हमारा कार्य सॉर्टेड ऐरे में मौजूद उन सभी एलिमेंट्स को गिनना है जो दिए गए नंबर से छोटे हैं।उदाहरण#include <bits/stdc++.h> using namespace std; int countSmaller(int

  1. - C++ में ऐरे में सम और विषम एलिमेंट्स की गिनती

    इस ट्यूटोरियल में, हम ऐरे में सम और विषम एलिमेंट्स की संख्या खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे।इसके लिए हमें एक ऐरे प्रदान किया जाएगा। हमारा कार्य दिए गए ऐरे में सम और विषम एलिमेंट्स की संख्या की गणना करना है।उदाहरण#include<iostream> using namespace std; void CountingEvenOdd(int arr[],