Advertisement
DimovIvan

Advanced - retake exam - Code2

May 23rd, 2022 (edited)
678
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream>
  2. #include<string>
  3. #include<sstream>
  4. #include<vector>
  5. #include<unordered_set>
  6. #include<unordered_map>
  7. #include<algorithm>
  8.  
  9. std::vector<int> readSeparators() {
  10.     std::vector<int> separators{};
  11.  
  12.     std::string line;
  13.     getline(std::cin, line);
  14.     std::istringstream istr(line);
  15.     int separator = 0;
  16.     while (istr >> separator)
  17.     {
  18.         separators.push_back(separator);
  19.     }
  20.     std::sort(separators.begin(), separators.end());
  21.     return separators;
  22. }
  23.  
  24. std::vector<int> readMessage() {
  25.     std::vector<int> message{};
  26.  
  27.     std::string line;
  28.     getline(std::cin, line);
  29.     std::istringstream istr(line);
  30.     int number = 0;
  31.     while (istr >> number)
  32.     {
  33.         message.push_back(number);
  34.     }
  35.  
  36.     return message;
  37. }
  38.  
  39. std::vector<int> readValues() {
  40.     std::vector<int> values{};
  41.  
  42.     int value = 0;
  43.     std::cin >> value;
  44.     std::cin.ignore();
  45.     while (value != 0)
  46.     {
  47.         values.push_back(value);
  48.         std::cin >> value;
  49.         std::cin.ignore();
  50.     }
  51.  
  52.     return values;
  53. }
  54.  
  55. std::unordered_map<int, size_t> produceCountMap(const std::vector<int>& separators,
  56.                                                 const std::vector<int>& message) {
  57.     std::unordered_map<int, size_t> countMap{};
  58.  
  59.     std::unordered_set<int> currPart{};
  60.     for (const auto number : message)
  61.     {
  62.         auto it = std::lower_bound(separators.begin(), separators.end(), number);
  63.         if (it != separators.end() && *it == number)    
  64.         {
  65.             if (!currPart.empty())
  66.             {
  67.                 for (auto it = currPart.begin(); it != currPart.end(); ++it)
  68.                 {
  69.                     countMap[*it]++;
  70.                 }
  71.                 currPart = {};
  72.             }
  73.             else
  74.             {
  75.                 continue;
  76.             }
  77.         }
  78.         else {
  79.             currPart.insert(number);
  80.         }
  81.     }
  82.     if (!currPart.empty())
  83.     {
  84.         for (auto it = currPart.begin(); it != currPart.end(); ++it)
  85.         {
  86.             countMap[*it]++;
  87.         }
  88.     }
  89.     return countMap;
  90. }
  91.  
  92. //std::vector<int> getSolution(const std::unordered_map<int, size_t>& countMap,
  93. //                             const std::vector<int>& values) {
  94. //    std::vector<int> solution{};
  95. //    int currResult = 0;
  96. //    for (const auto& value : values)
  97. //    {
  98. //        auto it = countMap.find(value);
  99. //        if (it != countMap.end())
  100. //        {
  101. //            currResult = it->second;
  102. //        }
  103. //        else
  104. //        {
  105. //            currResult = 0;
  106. //        }
  107. //        solution.push_back(currResult);
  108. //    }
  109. //    return solution;
  110. //}
  111. void getAndPrintSolution(const std::unordered_map<int, size_t>& countMap,
  112.                  const std::vector<int>& values) {
  113.     std::ostringstream ostr;
  114.     int currResult = 0;
  115.     for (const auto& value : values)
  116.     {
  117.         auto it = countMap.find(value);
  118.         if (it != countMap.end())
  119.         {
  120.             ostr << it->second << '\n';
  121.         }
  122.         else
  123.         {
  124.             ostr << 0 << '\n';
  125.         }
  126.     }
  127.     std::cout << ostr.str();
  128. }
  129. //void printSolution(const std::vector<int>& solution) {
  130. //
  131. //    for (const auto partsNumb : solution)
  132. //    {
  133. //        std::cout << partsNumb << std::endl;
  134. //    }
  135. //}
  136. int main() {
  137.     std::cin.tie(nullptr);
  138.     const std::vector<int> separators = readSeparators();
  139.     const std::vector<int> message = readMessage();
  140.     const std::vector<int> values = readValues();
  141.     const std::unordered_map<int, size_t> countMap = produceCountMap(separators, message);
  142.     //const std::vector<int> solution = getSolution(countMap, values);
  143.     //printSolution(solution);
  144.     getAndPrintSolution(countMap, values);
  145.     return 0;
  146. }
Advertisement
RAW Paste Data Copied
Advertisement