#include <iostream> #include<set> #include<map> using namespace std; // Money Splitwise Algorithm /* Output - Should also show transactions Rahul pays 50 to Ajay Rahul pays 10 to Neha 2 */ class person_compare { public: bool operator()(pair<string, int> p1, pair<string, int> p2) { return p1.second < p2.second; } }; int main() { int no_of_transactions, friends; cin >> no_of_transactions >> friends; string x, y; int amount; map<string, int> net; while (no_of_transactions--) { cin >> x >> y >> amount; if (net.count(x) == 0) { net[x] = 0; } if (net.count(y) == 0) { net[y] = 0; } net[x] -= amount; net[y] += amount; } //Iterate over the persons, add those person in the multiset who have non zero net multiset<pair<string, int>, person_compare> m; for (auto p : net) { string person = p.first; int amount = p.second; if (net[person] != 0) { m.insert(make_pair(person, amount)); } } //3. settlements (start & end) int cnt = 0; while (!m.empty()) { auto low = m.begin(); auto high = prev(m.end()); int debit = low->second; string debit_person = low->first; int credit = high->second; string credit_person = high->first; //Pop them out m.erase(low); m.erase(high); int settled_amount = min(-debit, credit); debit += settled_amount; credit -= settled_amount; //Print the Transaction between people cout << debit_person << " will pay " << settled_amount << " to " << credit_person << endl; if (debit != 0) { m.insert(make_pair(debit_person, debit)); } if (credit != 0) { m.insert(make_pair(credit_person, credit)); } cnt += 1; } cout << cnt << endl; return 0; }
Write, Run & Share C++ code online using OneCompiler's C++ online compiler for free. It's one of the robust, feature-rich online compilers for C++ language, running on the latest version 17. Getting started with the OneCompiler's C++ compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C++
and start coding!
OneCompiler's C++ online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Enter name:";
getline (cin, name);
cout << "Hello " << name;
return 0;
}
C++ is a widely used middle-level programming language.
When ever you want to perform a set of operations based on a condition If-Else is used.
if(conditional-expression) {
//code
}
else {
//code
}
You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to If-Else-If ladder.
switch(conditional-expression){
case value1:
// code
break; // optional
case value2:
// code
break; // optional
......
default:
code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
//code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while (condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity. Function gets run only when it is called.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
// code
}