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

इष्टतम खाता संतुलन - C++


मान लीजिए दोस्तों का एक समूह छुट्टी पर गया और कभी-कभी उन्होंने एक-दूसरे को पैसे उधार दिए। तो उदाहरण के लिए, अमित ने बिक्रम के दोपहर के भोजन के लिए $10 का भुगतान किया। फिर बाद में चंदन ने अमित को टैक्सी किराए के लिए $5 दिए। हमें एक मॉडल डिज़ाइन करना है जहां प्रत्येक लेनदेन को एक टपल (x, y, z) के रूप में लिया जाता है जिसका अर्थ है व्यक्ति x ने व्यक्ति y को $z दिए।

मान लीजिए अमित, बिक्रम, और चंदन व्यक्ति 0, 1, और 2 हैं, तो लेनदेन को [[0, 1, 10], [2, 0, 5]] के रूप में दर्शाया जा सकता है। यदि हमारे पास लोगों के एक समूह के बीच लेनदेन की सूची है, तो हमें ऋण निपटाने के लिए आवश्यक न्यूनतम लेनदेन की संख्या ढूंढनी होगी।

तो, यदि इनपुट [[0,1,10], [2,0,5]] जैसा है, तो आउटपुट 2 होगा, क्योंकि व्यक्ति #0 ने व्यक्ति #1 को $10 दिए। फिर व्यक्ति #2 ने व्यक्ति #0 को $5 दिए। यहां दो लेनदेन की आवश्यकता है। ऋण निपटाने का एक तरीका है व्यक्ति #1, व्यक्ति #0 और #2 को $5 प्रत्येक का भुगतान करे।

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

  • एक ऐरे v परिभाषित करें

  • dfs() नामक एक फ़ंक्शन परिभाषित करें, जो idx लेगा,

  • ret := inf

  • जब तक (idx, v के आकार से कम है और v[idx] शून्येतर नहीं है), करें −

    • (idx को 1 से बढ़ाएं)

  • i := idx + 1 से आरंभ करें, जब i − v का आकार, अद्यतन करें (i को 1 से बढ़ाएं), करें −

    • यदि v[i] * v[idx] < 0, तो −

      • v[i] := v[i] + v[idx]

      • ret := ret और 1 + dfs(idx + 1) का न्यूनतम

      • v[i] := v[i] - v[idx]

  • लौटाएं (यदि ret, inf के समान है, तो 0, अन्यथा ret)

  • मुख्य विधि से निम्नलिखित करें −

  • एक मैप m परिभाषित करें

  • n := t का आकार

  • i := 0 से आरंभ करें, जब i < n, अद्यतन करें (i को 1 से बढ़ाएं), करें −

    • u := t[i, 0], v := t[i, 1]

    • bal := t[i, 2]

    • m[u] := m[u] + bal

    • m[v] := m[v] - bal

  • m में प्रत्येक कुंजी-मान जोड़ी i के लिए, करें −

    • यदि i का मान, तो −

      • i के मान को v के अंत में डालें

    • (i को 1 से बढ़ाएं)

  • dfs(0) और v के आकार का न्यूनतम लौटाएं

उदाहरण  

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

#include <bits/stdc++.h> using namespace std; class Solution { public:    vector<int> v;    int dfs(int idx) {       int ret = INT_MAX;       while (idx < v.size() && !v[idx])          idx++;       for (int i = idx + 1; i < v.size(); i++) {          if (v[i] * v[idx] < 0) {             v[i] += v[idx];             ret = min(ret, 1 + dfs(idx + 1));             v[i] -= v[idx];           }       }       return ret == INT_MAX ? 0 : ret;    }    int minTransfers(vector<vector<int>>&t) {       map<int, int> m;       int n = t.size();       for (int i = 0; i < n; i++) {          int u = t[i][0];          int v = t[i][1];          int bal = t[i][2];          m[u] += bal;          m[v] -= bal;       }       map<int, int>::iterator i = m.begin();       while (i != m.end()) {          if (i->second)             v.push_back(i->second);          i++;       }       return min(dfs(0), (int)v.size());    } }; main() {    Solution ob;    vector<vector<int>> v = {{0,1,10},{2,0,5}};    cout << (ob.minTransfers(v)); }

इनपुट

{{0,1,10},{2,0,5}}

आउटपुट

2

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