#include #include #include /* collectors: { a: 10, b: 25, c: 50, d: 100 } after selling kidney: 49 so it's: 1. 49 - 10 = 39 2. 39 - 25 = 14 3. 14 - 50 ??? NO. its just = (14 / remaining which is 2) = 7 4. also just 7 */ struct Collector { int money = 0; std::string name; bool operator<(const Collector &collector) const { return money < collector.money; } }; std::vector calculatePayments(std::vector debts, int budget) { int remaining_budget = budget; int remaining_collectors = debts.size(); std::vector payments; if (budget < remaining_collectors) { return payments; } std::sort(debts.begin(), debts.end()); payments.reserve(remaining_collectors); for (const auto& debt_record : debts) { const auto& debt_amount = debt_record.money; const auto& debt_collector = debt_record.name; const int even_distribution = remaining_budget / remaining_collectors; int spending = (even_distribution <= debt_amount) ? even_distribution : debt_amount; payments.push_back({spending, debt_collector}); remaining_budget -= spending; --remaining_collectors; } return payments; } int main() { const std::vector debts = { { 100, "Suika" }, { 250, "Remilia" }, { 1, "Reimu" }, { 20, "Sakuya" } }; const int budget = 67; for (const auto& payment : calculatePayments(debts, budget)) { std::cout << payment.name << ": " << payment.money << '\n'; } }