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

C++ प्रोग्राम एक सरणी में जोड़े की संख्या का पता लगाने के लिए जो किसी दिए गए शर्त को पूरा करता है

मान लीजिए, हमें सरणी संख्याओं में n संख्याएँ दी गई हैं। हमें सरणी से दो संख्याओं की एक जोड़ी चुननी है, और एक शर्त है कि सरणी में उनकी स्थिति का अंतर दो संख्याओं के योग के बराबर है। दी गई संख्याओं के समूह से कुल n(n-1)/2 कुल युग्म हो सकते हैं। हमें सरणी से ऐसे युग्मों की कुल संख्या ज्ञात करनी है।

इसलिए, यदि इनपुट n =8, nums ={4, 2, 1, 0, 1, 2, 3, 3} जैसा है, तो आउटपुट 13 होगा।

सरणी में ऐसे 13 जोड़े हो सकते हैं।

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

Define an array vals(n)
for initialize i := 0, when i < n, update (increase i by 1), do:
   vals[i] := i + 1 - nums[i]
sort the array vals
res := 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   k := nums[i] + i + 1
res := res + (position of first occurrence of a value not less than k in array vals - position of first occurrence of a value not greater than k in array vals)
return res

उदाहरण

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

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

int solve(int n, vector<int> nums){
   vector<int> vals(n);
   for( int i = 0; i < n; i++)
      vals[i] = i + 1 - nums[i]; 
   sort(vals.begin(), vals.end());
   int res = 0;
   for( int i = 0; i < n; i++ ) {
      int k = nums[i] + i + 1;
      res += upper_bound(vals.begin(), vals.end(), k) - lower_bound(vals.begin(), vals.end(), k);
   }
   return res;
}
int main() {
   int n = 8;
   vector<int> nums = {4, 2, 1, 0, 1, 2, 3, 3};
   cout<< solve(n, nums);
   return 0;
}

इनपुट

8, {4, 2, 1, 0, 1, 2, 3, 3}

आउटपुट

13

  1. C++ प्रोग्राम अधिकतम संख्या में कक्षों का पता लगाने के लिए जिन्हें प्रकाशित किया जा सकता है

    मान लीजिए, हमें h * w आयामों का एक ग्रिड दिया गया है। ग्रिड में कोशिकाओं में या तो एक बल्ब या बाधाएं हो सकती हैं। एक लाइट बल्ब सेल अपने दाएं, बाएं, ऊपर और नीचे की कोशिकाओं को रोशन करता है और प्रकाश कोशिकाओं के माध्यम से चमक सकता है जब तक कि कोई बाधा सेल प्रकाश को अवरुद्ध न करे। एक बाधा सेल को रोशन न

  1. C++ प्रोग्राम एक ग्रिड में प्रबुद्ध कोशिकाओं की संख्या का पता लगाने के लिए

    मान लीजिए, हमें h * w आयामों का एक ग्रिड दिया गया है। ग्रिड में कोशिकाओं में या तो बल्ब या बाधाएं हो सकती हैं। एक लाइट बल्ब सेल स्वयं को और उसके दाएं, बाएं, ऊपर और नीचे की कोशिकाओं को रोशन करता है और प्रकाश कोशिकाओं के माध्यम से चमक सकता है जब तक कि कोई बाधा सेल प्रकाश को अवरुद्ध न करे। एक बाधा सेल

  1. C++ प्रोग्राम दिए गए ग्राफ़ में ब्रिज किनारों की संख्या का पता लगाने के लिए

    मान लीजिए, हमें एक अभारित, अप्रत्यक्ष ग्राफ दिया गया है जिसमें n कोने और m किनारे हैं। ग्राफ़ में ब्रिज का किनारा वह किनारा होता है जिसके हटाने से ग्राफ़ डिस्कनेक्ट हो जाता है। हमें दिए गए आलेख में ऐसे आलेखों की संख्या ज्ञात करनी है। ग्राफ़ में समानांतर किनारे या सेल्फ़-लूप नहीं होते हैं। इसलिए, यद