shushus

Спринт 10. Ускоряем, отказываясь от сортировки.

Mar 8th, 2023
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include <cassert>
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. class MoneyBox {
  9. public:
  10.     explicit MoneyBox(vector<int64_t> nominals) : nominals_(move(nominals))
  11.                                                 , counts_(nominals_.size()) {}
  12.  
  13.     const vector<int>& GetCounts() const {
  14.         return counts_;
  15.     }
  16.  
  17.     int GetNominalIndex(int64_t value) {
  18.         return find(nominals_.begin(),
  19.                     nominals_.end(),
  20.                     value) - nominals_.begin();
  21.     }
  22.  
  23.     void PushCoin(int64_t value) {
  24.         ++counts_[GetNominalIndex(value)];
  25.     }
  26.  
  27.     void PrintCoins(ostream& out) const {
  28.         for (int i = 0; i < counts_.size(); ++i) {
  29.             if (counts_[i] > 0) {
  30.                 out << nominals_[i] << ": "s << counts_[i] << endl;
  31.             }
  32.         }
  33.     }
  34.  
  35. private:
  36.     const vector<int64_t> nominals_;
  37.     vector<int> counts_;
  38. };
  39.  
  40. ostream& operator<<(ostream& out, const MoneyBox& cash) {
  41.     cash.PrintCoins(out);
  42.     return out;
  43. }
  44.  
  45. int main() {
  46.     MoneyBox cash({1, 500, 10000});
  47.     cash.PushCoin(500);
  48.     cash.PushCoin(500);
  49.     cash.PushCoin(10000);
  50.     assert((cash.GetCounts() == vector<int>{0,2,1}));
  51.     cout << cash << endl;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment