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

सी++ में उनके प्रदर्शन के आधार पर कर्मचारियों को भुगतान की जाने वाली अंतिम राशि का पता लगाने के लिए कार्यक्रम


मान लीजिए कि हमारे पास समान लंबाई की संख्याओं की दो सूचियां हैं जिन्हें प्रदर्शन और लागत कहा जाता है। और हमारे पास एक और संख्या k भी है। ये इंगित करते हैं कि प्रत्येक कार्यकर्ता मैं प्रदर्शन [i] स्तर पर प्रदर्शन करता हूं और इसमें कम से कम लागतें [i] लगती हैं। हमें k कर्मचारियों को काम पर रखने के लिए न्यूनतम लागत का पता लगाना होगा, यह भी दिया गया है कि कर्मचारियों को समूह के अन्य कर्मचारियों की तुलना में उनके प्रदर्शन के अनुपात में भुगतान किया जाएगा।

इसलिए, यदि इनपुट प्रदर्शन की तरह है =[5, 3, 2] लागत =[100, 5, 4] k =2, तो आउटपुट 10 होगा, क्योंकि हम emp1 और emp2 का चयन कर सकते हैं। उन्हें कम से कम 5 + 4 =9 राशि का भुगतान करना होगा। लेकिन emp1 emp2 से 1.5 गुना बेहतर प्रदर्शन करता है, इसलिए उसे कम से कम 1.5 * 4 =6 का भुगतान किया जाना चाहिए। तो कुल मिलाकर उन्हें 6 + 4 =10 मिलेगा।

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

  • n :=c का आकार

  • n आकार की एक सरणी seq परिभाषित करें

  • seq को 0 से n−1 तक के मानों से भरें

  • इन मानदंडों के आधार पर सरणी seq को सॉर्ट करें (c[i] * p[j]

  • उत्तर :=inf, psum :=0

  • प्राथमिकता कतार pq परिभाषित करें

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

    • idx :=seq[i]

    • p[idx] को pq में डालें

    • psum :=psum + p[idx]

    • यदि pq> k का आकार है, तो -

      • psum :=psum - pq का शीर्ष अवयव

      • pq से शीर्ष तत्व हटाएं

    • अगर मैं>=k − 1, तो −

      • उत्तर:=न्यूनतम उत्तर और (c[idx] / p[idx] * psum)

  • वापसी उत्तर

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
double solve(vector<int>& p, vector<int>& c, int k) {
   int n = c.size();
   vector<int> seq(n);
   for (int i = 0; i < n; ++i)
   seq[i] = i;
   sort(seq.begin(), seq.end(), [&](int i, int j) { return c[i] *
   p[j] < c[j] * p[i]; });
   double ans = INT_MAX, psum = 0;
   priority_queue<int> pq;
   for (int i = 0; i < n; ++i) {
      int idx = seq[i];
      pq.emplace(p[idx]);
      psum += p[idx];
      if (pq.size() > k) {
         psum −= pq.top();
         pq.pop();
      }
      if (i >= k − 1)
      ans = min(ans, (double)c[idx] / p[idx] * psum);
   }
   return ans;
}
int main(){
   vector<int> performance = {5, 3, 2};
   vector<int> costs = {100, 5, 4};
   int k = 2;
   cout << solve(performance, costs, k);
}

इनपुट

{5, 3, 2}, {100, 5, 4}, 2

आउटपुट

10

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

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

  1. सी ++ प्रोग्राम 'के' को खोजने के लिए ऐसा है कि प्रत्येक सरणी तत्व के साथ इसका मॉड्यूलस समान है

    इस लेख में, हम एक पूर्णांक k को खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे, जैसे कि किसी दिए गए सरणी के प्रत्येक तत्व के साथ इसका मापांक समान हो। उदाहरण के लिए, मान लें कि हमें एक सरणी दी गई है, arr = {12, 22, 32} तब हमारे पास k =1, 2, 5, 10 का आउटपुट मान होता है। y) में दो मानों का मामला लें। तब ह

  1. C++ प्रोग्राम एक ग्राफ मैट्रिक्स के व्युत्क्रम को खोजने के लिए

    यह एक ग्राफ मैट्रिक्स के व्युत्क्रम को खोजने के लिए एक C++ प्रोग्राम है। मैट्रिक्स का व्युत्क्रम केवल तभी मौजूद होता है जब मैट्रिक्स गैर-एकवचन होता है, अर्थात, सारणिक 0 नहीं होना चाहिए। मैट्रिक्स का व्युत्क्रम कई तरीकों से पता लगाया जा सकता है। यहाँ हम आसन्न मैट्रिक्स और उसके सारणिक का उपयोग करके एक