mstoyanov7

kurrerc

Apr 26th, 2021
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <list>
  5. #include <sstream>
  6.  
  7. std::vector<int> readInput() {
  8. std::vector<int> vec;
  9. std::string line;
  10. getline(std::cin, line);
  11. std::istringstream istr(line);
  12. int number;
  13. while (istr >> number) {
  14. vec.push_back(number);
  15. }
  16. return vec;
  17. }
  18.  
  19. void handleTrainOne(std::vector<int>& trainTwo, std::list<int>& mergeTrains, std::string& letterSequence) {
  20. int element = trainTwo.back();
  21. mergeTrains.push_front(element);
  22. letterSequence.push_back('B');
  23. trainTwo.pop_back();
  24. }
  25.  
  26. void handleTrainTwo(std::vector<int>& trainOne, std::list<int>& mergeTrains, std::string& letterSequence) {
  27. int element = trainOne.back();
  28. mergeTrains.push_front(element);
  29. letterSequence.push_back('A');
  30. trainOne.pop_back();
  31. }
  32.  
  33. void handleBothTrains(std::vector<int>& trainOne, std::vector<int>& trainTwo, std::list<int>& mergeTrains,
  34. std::string& letterSequence) {
  35.  
  36. int trainOneElement = trainOne.back();
  37. int trainTwoElement = trainTwo.back();
  38.  
  39. if (trainOneElement < trainTwoElement) {
  40. mergeTrains.push_front(trainOneElement);
  41. letterSequence.push_back('A');
  42. trainOne.pop_back();
  43. }
  44. else {
  45. mergeTrains.push_front(trainTwoElement);
  46. letterSequence.push_back('B');
  47. trainTwo.pop_back();
  48. }
  49.  
  50. }
  51.  
  52. void mergedTrains(std::vector<int>& trainOne, std::vector<int>& trainTwo,
  53. std::list<int>& mergeTrains, std::string& letterSequence) {
  54.  
  55. while (true) {
  56.  
  57. const bool trainOneEmpty = trainOne.empty();
  58. const bool trainTwoEmpty = trainTwo.empty();
  59.  
  60. if (trainOneEmpty && trainTwoEmpty) {
  61. break;
  62. continue;
  63. }
  64.  
  65. if (trainOneEmpty) {
  66. handleTrainOne(trainTwo, mergeTrains, letterSequence);
  67. continue;
  68. }
  69.  
  70. if (trainTwoEmpty) {
  71. handleTrainTwo(trainOne, mergeTrains, letterSequence);
  72. continue;
  73. }
  74.  
  75. handleBothTrains(trainOne, trainTwo, mergeTrains, letterSequence);
  76. }
  77. }
  78.  
  79. void printSolution(std::list<int>& mergeTrains, std::string& letterSequence) {
  80. std::cout << letterSequence << std::endl;
  81.  
  82. for (int num : mergeTrains) {
  83. std::cout << num << ' ';
  84. }
  85. }
  86.  
  87.  
  88. int main() {
  89.  
  90. std::vector<int> trainOne = readInput();
  91. std::vector<int> trainTwo = readInput();
  92. std::list<int> mergeTrains;
  93. std::string letterSequence;
  94.  
  95. mergedTrains(trainOne, trainTwo, mergeTrains, letterSequence);
  96. printSolution(mergeTrains, letterSequence);
  97. }
Advertisement
Add Comment
Please, Sign In to add comment