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

C++ में टोकन बैग (Bag of Tokens)


मान लीजिए हमारे पास प्रारंभिक शक्ति P, 0 अंकों का प्रारंभिक स्कोर, और टोकन्स का एक बैग है। प्रत्येक टोकन का अधिकतम एक बार उपयोग किया जा सकता है, इसका मान token[i] है, और इसके दो संभावित उपयोग हैं:

  • यदि हमारे पास कम से कम token[i] शक्ति है, तो हम टोकन को फेस अप खेल सकते हैं, token[i] शक्ति खोकर 1 अंक प्राप्त करते हैं।

  • अन्यथा, यदि हमारे पास कम से कम 1 अंक है, तो हम टोकन को फेस डाउन खेल सकते हैं, token[i] शक्ति प्राप्त करके 1 अंक खोते हैं।

हमें किसी भी संख्या में टोकन्स खेलने के बाद प्राप्त होने वाले अधिकतम अंकों की संख्या खोजनी है।

उदाहरण के लिए, यदि tokens = [100,200,300,400] और P = 200 है, तो आउटपुट 2 होगा।

समाधान दृष्टिकोण

  1. टोकन्स ऐरे को सॉर्ट करें

  2. दो पॉइंटर्स i=0, j=n-1, curr=0, ret=0

  3. जब तक i ≤ j और x ≥ v[i]:

  4. छोटे टोकन्स से अंक प्राप्त करें (फेस अप)

  5. ret अपडेट करें

  6. बड़े टोकन्स से शक्ति प्राप्त करें (फेस डाउन) यदि आवश्यक हो

  7. ret लौटाएं

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

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

class Solution { 
public: 
    int bagOfTokensScore(vector<int>& v, int x) { 
        int n = v.size(); 
        int ret = 0; 
        sort(v.begin(), v.end()); 
        int i = 0; 
        int j = n - 1; 
        int curr = 0; 
        while(i <= j && x >= v[i]){ 
            while(i <= j && x >= v[i]){ 
                x -= v[i]; 
                curr++; 
                i++; 
            } 
            ret = max(curr, ret); 
            while(j >= i && curr && x < v[i]){ 
                curr--; 
                x += v[j]; 
                j--; 
            } 
        } 
        return ret; 
    } 
}; 

int main(){ 
    vector<int> v1 = {100,200,300,400}; 
    Solution ob; 
    cout << (ob.bagOfTokensScore(v1, 200)); 
    return 0; 
}

इनपुट

[100,200,300,400] 200

आउटपुट

2
  1. - C/C++ टोकन

    परिचय C++ टोकन प्रोग्राम की सबसे छोटी व्यक्तिगत इकाइयां हैं। C++, C का सुपरसेट है और इसलिए C के अधिकांश निर्माण C++ में उनके अर्थ और उपयोग के साथ कानूनी हैं। इसलिए टोकन, अभिव्यक्तियां, और डेटा प्रकार C के समान हैं। C++ टोकन के प्रकार कीवर्ड पहचानकर्ता स्थिरांक चर ऑपरेटर कीवर्ड कीवर्ड आरक्षित श

  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस