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

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

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

इसलिए, यदि इनपुट [3,1,2] जैसा है, तो आउटपुट 6 होगा, ऐसा इसलिए है क्योंकि इसके बाद के क्रम [1], [2], [3], [2,1], [2] हैं। 3], [1,3], [2,1,3] और चौड़ाई 0, 0, 0, 1, 1, 2, 2 हैं, इसलिए चौड़ाई मानों का योग 6 है।

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

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

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

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

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

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

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

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

  • सरणी को क्रमबद्ध करें a

  • उत्तर:=0

  • n :=आकार का

  • आरसीएनटी:=1

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

    • x =mul(a[i], sub(rcnt, 1))

    • y =mul(a[n-1-i], sub(rcnt, 1))

    • उत्तर =जोड़ें (उत्तर, उप (एक्स, वाई))

    • आरसीएनटी =आरसीएनटी * 2

    • आरसीएनटी:=आरसीएनटी मॉड एम

  • वापसी उत्तर

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

उदाहरण

#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;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,1,2};
   cout << (ob.sumSubseqWidths(v));
}

इनपुट

{3,1,2}

आउटपुट

6

  1. C++ में मैट्रिक्स ब्लॉक योग

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

  1. सी++ में लक्ष्य योग

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

  1. सी ++ में विभाज्य योग?

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