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

सी ++ में खरीदारों द्वारा खरीदे जा सकने वाले पैकेज की अधिकतम संख्या खोजने का कार्यक्रम

मान लीजिए कि हमारे पास बिक्री और खरीदारों की दो सूचियां हैं। बिक्री में प्रत्येक तत्व में [दिन, मूल्य] के रूप में दो मान होते हैं, यह इंगित करता है कि पैकेज केवल उस दिन उस मूल्य के लिए बिक्री के लिए उपलब्ध है। और खरीदारों में प्रत्येक तत्व [payday, राशि] के रूप में इंगित करता है कि खरीदार के पास payday और उसके बाद खर्च करने के लिए वह राशि है। यदि प्रत्येक खरीदार अधिकतम एक पैकेज खरीद सकता है, और प्रत्येक पैकेज केवल एक व्यक्ति को बेचा जा सकता है, तो खरीदे जा सकने वाले पैकेजों की अधिकतम संख्या ज्ञात करें।

इसलिए, यदि इनपुट बिक्री की तरह है =[[0, 5], [0, 5], [0, 6], [1, 4], [1, 5], [3, 4]] खरीदार =[[ 0, 4], [0, 6], [1, 5]], तो आउटपुट 3 होगा, क्योंकि पहला व्यक्ति पैकेज [1, 4] ले सकता है। दूसरा व्यक्ति [0, 6] ले सकता है। और अंतिम व्यक्ति पैकेज [1, 5] ले सकता है।

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

  • रिट:=0

  • सरणी खरीदारों को वेतन-दिवस के आधार पर क्रमबद्ध करें, यदि वेतन-दिवस समान हैं तो उन्हें राशि के आधार पर क्रमबद्ध करें

  • एक सेट pq परिभाषित करें

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

  • मैं :=0

  • बिक्री में प्रत्येक आइटम के लिए -

    • जबकि (i <खरीदारों और खरीदारों का आकार[i, 0] <=it[0]), करते हैं -

      • खरीदारों [i, 1] को pq में डालें

      • (i 1 से बढ़ाएँ)

    • j :=इसे सम्मिलित करने के लिए pq का सूचकांक [i] intp pq और इसे क्रमबद्ध करें

    • यदि j एक मान्य अनुक्रमणिका है, तो -

      • (रिटर्न 1 से बढ़ाएं)

      • pq से jth एलिमेंट हटाएं

  • वापसी रिट

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   static bool cmp(vector<int>& a, vector<int>& b) {
      return a[0] == b[0] ? a[1] > b[1] : a[0] < b[0];
   }
   int solve(vector<vector<int>>& sales, vector<vector<int>>& buyers) {
      int ret = 0;
      sort(buyers.begin(), buyers.end());
      multiset<int> pq;
      sort(sales.begin(), sales.end(), cmp);
      int i = 0;
      for (auto& it : sales) {
         while (i < buyers.size() && buyers[i][0] <= it[0]) {
            pq.insert(buyers[i][1]);
            i++;
         }
         auto j = pq.lower_bound(it[1]);
         if (j != pq.end()) {
            ret++;
            pq.erase(j);
         }
      }
      return ret;
   }
};
int solve(vector<vector<int>>& sales, vector<vector<int>>& buyers) {
   return (new Solution())->solve(sales, buyers);
}
int main(){
   vector<vector<int>> sales = {{0, 5},{0, 5},{0, 6},{1, 4},{1, 5},{3, 4}};
   vector<vector<int>> buyers = {{0, 4},{0, 6},{1, 5}};
   cout << solve(sales, buyers);
}

इनपुट

{{0, 5},{0, 5},{0, 6},{1, 4},{1, 5},{3, 4}}, {{0, 4},{0, 6},{1, 5}}

आउटपुट

3

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

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

  1. C++ प्रोग्राम कारों को बेचने से होने वाली अधिकतम राशि का पता लगाने के लिए

    मान लीजिए, बिक्री के लिए लाल और नीली कारों की मांग है। एक ऑटोमोबाइल कंपनी p लाल कारों और q नीली कारों को अलग-अलग कीमतों पर बेचने का फैसला करती है। वर्तमान में, कंपनी के पास लाल कारों की संख्या ए, नीली कारों की बी संख्या और रंगहीन कारों की सी संख्या (कारें अभी पेंट की जानी बाकी हैं) उनके स्टॉक में है

  1. C++ प्रोग्राम स्कोर की अधिकतम राशि का पता लगाने के लिए जिसे ग्राफ़ से घटाया जा सकता है

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