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

C++ में लीडरबोर्ड डिज़ाइन करें


मान लीजिए हमें एक लीडरबोर्ड क्लास डिज़ाइन करनी है, इसमें तीन अलग-अलग फंक्शन्स हैं -

  • addScore(playerId, score) - यह दिए गए प्लेयर के स्कोर में स्कोर जोड़कर लीडरबोर्ड को अपडेट करेगा। जब दिए गए आईडी वाला कोई प्लेयर लीडरबोर्ड में नहीं है, तो उसे दिए गए स्कोर के साथ लीडरबोर्ड में जोड़ें।
  • top(K) - यह टॉप K प्लेयर्स के स्कोर का योग लौटाएगा।
  • reset(playerId) - यह दिए गए आईडी वाले प्लेयर के स्कोर को 0 पर रीसेट करेगा। यह गारंटी है कि इस फंक्शन को कॉल करने से पहले प्लेयर को लीडरबोर्ड में जोड़ा गया था।

प्रारंभ में, लीडरबोर्ड खाली होना चाहिए।

यदि हम नीचे दिए गए ऑपरेशन करते हैं -

  • Leaderboard leaderboard = new Leaderboard ();
  • leaderboard.addScore(1,73); // लीडरबोर्ड है [[1,73]];
  • leaderboard.addScore(2,56); // लीडरबोर्ड है [[1,73],[2,56]];
  • leaderboard.addScore(3,39); // लीडरबोर्ड है [[1,73],[2,56],[3,39]];
  • leaderboard.addScore(4,51); // लीडरबोर्ड है [[1,73],[2,56],[3,39],[4,51]];
  • leaderboard.addScore(5,4); // लीडरबोर्ड है [[1,73],[2,56],[3,39],[4,51],[5,4]];
  • leaderboard.top(1); // 73 लौटाता है;
  • leaderboard.reset(1); // लीडरबोर्ड है [[2,56],[3,39],[4,51],[5,4]];
  • leaderboard.reset(2); // लीडरबोर्ड है [[3,39],[4,51],[5,4]];
  • leaderboard.addScore(2,51); // लीडरबोर्ड है [[2,51],[3,39],[4,51],[5,4]];
  • leaderboard.top(3); // 141 = 51 + 51 + 39 लौटाता है;

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

  • pq नामक इंटीजर पेयर्स की एक प्रायोरिटी क्यू परिभाषित करें, int टाइप कीज़ और int टाइप वैल्यूज़ का एक मैप m बनाएं। इनिशियलाइज़ेशन के लिए, यह मैप को क्लियर करेगा, और यदि क्यू खाली नहीं है, तो क्यू से सभी एलिमेंट्स डिलीट करें।
  • addScore() मेथड इस प्रकार होगा -
    • यदि playerId मौजूद है, तो m[playerId] := m[playerId] + score
    • पेयर (m[playerId], playerId) को pq में डालें
    • अन्यथा m[playerId] = score
  • top() मेथड इस प्रकार होगा
  • पेयर्स का एक वेक्टर temp बनाएं, sum := 0 सेट करें
  • जब तक k 0 नहीं है
    • curr := pq का टॉप, pq से डिलीट करें
    • यदि m[curr पेयर का सेकंड मान] = curr पेयर का फर्स्ट मान
      • k को 1 से घटाएं
      • sum := sum + curr का फर्स्ट मान
      • curr को temp में डालें
  • i के लिए 0 से temp के आकार तक की रेंज में
    • temp[i] को pq में डालें
  • reset() फंक्शन इस प्रकार होगा -
    • m[playerId] = 0

उदाहरण (C++)

बेहतर समझ के लिए निम्नलिखित इम्प्लीमेंटेशन देखें -

#include <bits/stdc++.h> using namespace std; class Leaderboard { public:    priority_queue< pair <int,int> > pq;    map < int, int > m;    Leaderboard() {       m.clear();       while(!pq.empty())pq.pop();    }    void addScore(int playerId, int score) {       if(m.find(playerId)!=m.end()){          m[playerId] += score;       }       else m[playerId] = score;;          pq.push({m[playerId], playerId});    }    int top(int k) {       vector < pair <int,int> > temp;       int sum = 0;       while(k){          pair <int, int> curr = pq.top();          pq.pop();          if(m[curr.second] == curr.first){             k--;             sum += curr.first;             temp.push_back(curr);          }       }       for(int i = 0; i < temp.size(); i++)pq.push(temp[i]);       return sum;    }    void reset(int playerId) {       m[playerId] = 0;    } }; main(){    Leaderboard ob;    ob.addScore(1,73);    ob.addScore(2,56);    ob.addScore(3,39);    ob.addScore(4,51);    ob.addScore(5,4);    cout <<ob.top(1) << endl;    ob.reset(1);    ob.reset(2);    ob.addScore(2,51);    cout <<ob.top(2) << endl; }

इनपुट

लीडरबोर्ड इनिशियलाइज़ करें फिर अलग-अलग परिणाम देखने के लिए फंक्शन्स का उपयोग करें। main() फंक्शन देखें

आउटपुट

73 102

  1. C++ में डायगोनल ट्रैवर्स II C++ में डायगोनल ट्रैवर्स II

    मान लीजिए हमारे पास nums नामक लिस्ट ऑफ लिस्ट है, हमें nums के सभी एलिमेंट्स को डायगोनल क्रम में दिखाना है।इसलिए, यदि इनपुट हैतो आउटपुट होगा [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:एक ऐरे ret परिभाषित करेंएक 2D ऐरे v परिभाषित करेंi := 0 से शुरू करें,

  1. C++ में प्रोसेस मारें C++ में प्रोसेस मारें

    मान लीजिए हमारे पास n प्रोसेस हैं, यहां प्रत्येक प्रोसेस की एक अद्वितीय आईडी होती है जिसे PID या प्रोसेस आईडी कहा जाता है और इसका PPID (पैरेंट प्रोसेस आईडी) भी होता है। प्रत्येक प्रोसेस का केवल एक पैरेंट प्रोसेस होता है, लेकिन उसके एक या अधिक चाइल्ड प्रोसेस हो सकते हैं। यह एक ट्री संरचना की तरह है।

  1. C++ में गिलहरी सिमुलेशन C++ में गिलहरी सिमुलेशन

    एक पेड़, एक गिलहरी, और कई नट्स हैं। स्थितियों को 2D ग्रिड में सेल द्वारा दर्शाया जाता है। आपका लक्ष्य गिलहरी के लिए सभी नट्स को इकट्ठा करके उन्हें एक-एक करके पेड़ के नीचे रखने के लिए न्यूनतम दूरी ढूंढना है। गिलहरी एक समय में अधिकतम एक नट ले जा सकती है और चार दिशाओं में आगे बढ़ सकती है - ऊपर, नीचे,