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

सबसीक्वेंस चौड़ाई का योग C++ में

मान लीजिए हमारे पास पूर्णांकों की एक सरणी A है, A के सभी गैर-खाली सबसीक्वेंस पर विचार करें। किसी भी अनुक्रम S के लिए, S की चौड़ाई को S के अधिकतम और न्यूनतम तत्व के बीच का अंतर माना जाता है। हमें A के सभी सबसीक्वेंस की चौड़ाई का योग ढूंढना है। उत्तर बहुत बड़ा हो सकता है, इसलिए मॉड्यूलो 10^9 + 7 में वापस करें।

उदाहरण के लिए, यदि इनपुट [3,1,2] है, तो आउटपुट 6 होगा।

हल करने का दृष्टिकोण

मुख्य अंतर्दृष्टि: प्रत्येक तत्व का योगदान इस पर निर्भर करता है कि यह कितनी बार अधिकतम बनाम न्यूनतम होता है:

  • सरणी को सॉर्ट करें

  • सॉर्ट की गई सरणी में, a[i] 2^i बार अधिकतम होता है और 2^(n-1-i) बार न्यूनतम होता है

  • योगदान = a[i] * (2^i - 2^(n-1-i))

  • सभी योगदानों को मॉड्यूलो 10^9+7 के साथ जोड़ें

उदाहरण

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

class Solution { 
public: 
    lli add(lli a, lli b){ 
        return ( (a % m) + (b % m) ) % m; 
    } 
    
    lli sub(lli a, lli b){ 
        return ( ( (a % m) - (b % m) ) + m ) % m; 
    } 
    
    lli mul(lli a, lli b){ 
        return ( (a % m) * (b % m) ) % m; 
    } 
    
    int sumSubseqWidths(vector<int>& a) { 
        sort(a.begin(), a.end()); 
        int ans = 0; 
        int n = a.size(); 
        lli rcnt = 1; 
        
        for(int i = 0 ; i < n; i++){ 
            ans = add (ans, sub(mul(a[i] , sub(rcnt , 1)), mul(a[n-1-i], sub(rcnt,1)))); 
            rcnt <<= 1; 
            rcnt %= m; 
        } 
        return ans; 
    } 
}; 

int main(){ 
    Solution ob; 
    vector<int> v = {3,1,2}; 
    cout << (ob.sumSubseqWidths(v)); 
    return 0;
}

इनपुट

{3,1,2}

आउटपुट

6
  1. - C++ में मैट्रिक्स ब्लॉक सम

    मान लीजिए हमारे पास एक m * n मैट्रिक्स है जिसे mat कहते हैं और एक इंटीजर K है, हमें एक और मैट्रिक्स answer ढूंढना है जहां प्रत्येक answer[i][j] उन सभी एलिमेंट्स mat[r][c] का योग है जिनके लिए i - K <= r <= i + K, j - K <= c <= j + K, और (r, c) मैट्रिक्स में एक वैध पोजीशन है। यदि इनपुट इस प्रकार है -1

  1. - C++ में Target Sum

    मान लीजिए हमारे पास गैर-ऋणात्मक पूर्णांकों की एक सूची है, a1, a2, ..., an, और एक अन्य मान, जो लक्ष्य (target) है, S। अब हमारे पास 2 प्रतीक + और - हैं। प्रत्येक पूर्णांक के लिए, हमें + और - में से एक को उसके नए प्रतीक के रूप में चुनना चाहिए। हमें यह पता लगाना है कि पूर्णांकों का योग लक्ष्य मान S के स

  1. - C++ में एलिक्वॉट योग (Aliquot Sum)

    यहां हम देखेंगे कि एलिक्वॉट योग क्या है? n का एलिक्वॉट योग n को छोड़कर n के सभी पूर्ण गुणनखंडों का योग है। उदाहरण के लिए, यदि संख्या 20 है, तो पूर्ण गुणनखंड (1, 2, 4, 5, 10) हैं। तो एलिक्वॉट योग 22 है। एक दिलचस्प तथ्य यह है कि, यदि किसी संख्या का एलिक्वॉट योग संख्या स्वयं है, तो वह संख्या एक पूर्ण