Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.60 KB | None | 0 0
  1. /** @author wasd
  2.     @date 14/11/2018 */
  3. #include <iostream>
  4. #include <queue>
  5.  
  6. template <typename T>
  7. class Stack {
  8.  public:
  9.   Stack() = default;
  10.  
  11.   ~Stack() {
  12.     delete head_;
  13.   }
  14.  
  15.   T Top() const {
  16.     return head_->value;
  17.   }
  18.  
  19.   bool IsEmpty() const {
  20.     return head_ == nullptr;
  21.   }
  22.  
  23.   int GetSize () const {
  24.     return size_;
  25.   }
  26.  
  27.   void Push(const T& value) {
  28.     Node* node = new Node;
  29.     ++size_;
  30.     node->value = value;
  31.     node->next = head_;
  32.     head_ = node;
  33.   }
  34.  
  35.   void Pop() {
  36.     if(!IsEmpty()) {
  37.       --size_;
  38.       Node* temp = head_;
  39.       head_ = temp->next;
  40.       temp->next = nullptr;
  41.       delete temp;
  42.     }
  43.   }
  44.  
  45.   void Clear() {
  46.     delete head_;
  47.     head_ = nullptr;
  48.   }
  49.  
  50.  private:
  51.   struct Node {
  52.     ~Node() {
  53.       if (next != nullptr) {
  54.         delete next;
  55.       }
  56.     }
  57.  
  58.     T value;
  59.     Node* next = nullptr;
  60.   };
  61.  
  62.   Node* head_ = nullptr;
  63.   int size_ = 0;
  64. };
  65.  
  66. template <typename T>
  67. class Queue {
  68.  public:
  69.   Queue() = default;
  70.  
  71.   void Enqueue(const T& value) {
  72.     stack1.Push(value);
  73.     ++size_;
  74.   }
  75.  
  76.   void Dequeue() {
  77.     if (stack2.IsEmpty() && !stack1.IsEmpty()) {
  78.       while (!stack1.IsEmpty()) {
  79.         stack2.Push(stack1.Top());
  80.         stack1.Pop();
  81.       }
  82.     }
  83.     if (!stack2.IsEmpty()) {
  84.       stack2.Pop();
  85.     }
  86.     --size_;
  87.   }
  88.  
  89.   T Front() {
  90.     if (stack2.IsEmpty() && !stack1.IsEmpty()) {
  91.       while (!stack1.IsEmpty()) {
  92.         stack2.Push(stack1.Top());
  93.         stack1.Pop();
  94.       }
  95.     }
  96.     return stack2.Top();
  97.   }
  98.  
  99.   int GetSize() const {
  100.     return size_;
  101.   }
  102.  
  103.   bool IsEmpty() const {
  104.     return size_ == 0;
  105.   }
  106.  
  107.   void Clear() {
  108.     stack1.Clear();
  109.     stack2.Clear();
  110.   }
  111.  
  112.  private:
  113.   Stack<T> stack1;
  114.   Stack<T> stack2;
  115.   int size_ = 0;
  116. };
  117.  
  118. int WhoWouldWin(Queue<int>& queue1, Queue<int>& queue2, int& counter) {
  119.   int temp = 0;
  120.   while (counter != 1000000) {
  121.     if (queue1.IsEmpty()) {
  122.       return 2;
  123.     }
  124.     if (queue2.IsEmpty()) {
  125.       return 1;
  126.     }
  127.  
  128.     ++counter;
  129.  
  130.     if ((queue1.Front() > queue2.Front()) || (queue1.Front() == 0 && queue2.Front() == 9)) {
  131.       temp = queue1.Front();
  132.       queue1.Enqueue(temp);
  133.       queue1.Dequeue();
  134.  
  135.       temp = queue2.Front();
  136.       queue1.Enqueue(temp);
  137.       queue2.Dequeue();
  138.     } else {
  139.       if ((queue1.Front() < queue2.Front()) || (queue2.Front() == 0 && queue1.Front() == 9)) {
  140.         temp = queue2.Front();
  141.         queue2.Enqueue(temp);
  142.         queue2.Dequeue();
  143.  
  144.         temp = queue1.Front();
  145.         queue2.Enqueue(temp);
  146.         queue1.Dequeue();
  147.       }
  148.     }
  149.  
  150.     int temp = 0;
  151.     for(int i = 1; i <= 5; ++i) {
  152.       std::cout << queue1.Front() << " ";
  153.       temp = queue1.Front();
  154.       queue1.Dequeue();
  155.       queue1.Enqueue(temp);
  156.     }
  157.     std::cout << std::endl;
  158.     for(int i = 1; i <= 5; ++i) {
  159.       std::cout << queue2.Front() << " ";
  160.       temp = queue2.Front();
  161.       queue2.Dequeue();
  162.       queue2.Enqueue(temp);
  163.     }
  164.     std::cout << std::endl << std::endl;
  165.  
  166.     if (counter == 1) {
  167.       break;
  168.     }
  169.  
  170.   }
  171.  
  172.   return 0;
  173. }
  174.  
  175. int main() {
  176.   Queue<int> queue1;
  177.   Queue<int> queue2;
  178.  
  179.   int temp = 0;
  180.   for(int i = 1; i <= 5; ++i) {
  181.     std::cin >> temp;
  182.     queue1.Enqueue(temp);
  183.   }
  184.   for(int i = 1; i <= 5; ++i) {
  185.     std::cin >> temp;
  186.     queue2.Enqueue(temp);
  187.   }
  188.  
  189.   int counter = 0;
  190.   int result = WhoWouldWin(queue1, queue2, counter);
  191.  
  192.   if (result == 1) {
  193.     std::cout << "first " << counter;
  194.   }
  195.   if (result == 2) {
  196.     std::cout << "second " << counter;
  197.   }
  198.   if (result == 0) {
  199.     std::cout << "botva";
  200.   }
  201.  
  202.   return 0;
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement