Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <list>
- #include <sstream>
- std::vector<int> readInput() {
- std::vector<int> vec;
- std::string line;
- getline(std::cin, line);
- std::istringstream istr(line);
- int number;
- while (istr >> number) {
- vec.push_back(number);
- }
- return vec;
- }
- void handleTrainOne(std::vector<int>& trainTwo, std::list<int>& mergeTrains, std::string& letterSequence) {
- int element = trainTwo.back();
- mergeTrains.push_front(element);
- letterSequence.push_back('B');
- trainTwo.pop_back();
- }
- void handleTrainTwo(std::vector<int>& trainOne, std::list<int>& mergeTrains, std::string& letterSequence) {
- int element = trainOne.back();
- mergeTrains.push_front(element);
- letterSequence.push_back('A');
- trainOne.pop_back();
- }
- void handleBothTrains(std::vector<int>& trainOne, std::vector<int>& trainTwo, std::list<int>& mergeTrains,
- std::string& letterSequence) {
- int trainOneElement = trainOne.back();
- int trainTwoElement = trainTwo.back();
- if (trainOneElement < trainTwoElement) {
- mergeTrains.push_front(trainOneElement);
- letterSequence.push_back('A');
- trainOne.pop_back();
- }
- else {
- mergeTrains.push_front(trainTwoElement);
- letterSequence.push_back('B');
- trainTwo.pop_back();
- }
- }
- void mergedTrains(std::vector<int>& trainOne, std::vector<int>& trainTwo,
- std::list<int>& mergeTrains, std::string& letterSequence) {
- while (true) {
- const bool trainOneEmpty = trainOne.empty();
- const bool trainTwoEmpty = trainTwo.empty();
- if (trainOneEmpty && trainTwoEmpty) {
- break;
- continue;
- }
- if (trainOneEmpty) {
- handleTrainOne(trainTwo, mergeTrains, letterSequence);
- continue;
- }
- if (trainTwoEmpty) {
- handleTrainTwo(trainOne, mergeTrains, letterSequence);
- continue;
- }
- handleBothTrains(trainOne, trainTwo, mergeTrains, letterSequence);
- }
- }
- void printSolution(std::list<int>& mergeTrains, std::string& letterSequence) {
- std::cout << letterSequence << std::endl;
- for (int num : mergeTrains) {
- std::cout << num << ' ';
- }
- }
- int main() {
- std::vector<int> trainOne = readInput();
- std::vector<int> trainTwo = readInput();
- std::list<int> mergeTrains;
- std::string letterSequence;
- mergedTrains(trainOne, trainTwo, mergeTrains, letterSequence);
- printSolution(mergeTrains, letterSequence);
- }
Advertisement
Add Comment
Please, Sign In to add comment