Advertisement
smatskevich

Seminar3

Oct 3rd, 2022
956
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.21 KB | None | 1 0
  1. #include <iostream>
  2. #include <string>
  3. #include <stack>
  4.  
  5. // true, если строка s является ПСП
  6. // false, иначе
  7. bool IsCorrectBracketSequence(const std::string& s) {
  8.   // Соответствующие открытым закрывающие скобки, которые ожидаем обнаружить в строке
  9.   std::stack<char> opened;
  10.   auto n = s.size();
  11.   for (int i = 0; i < n; ++i) {
  12.     char elem = s[i];
  13.     switch (elem) {
  14.       case '(':
  15.         opened.push(')');
  16.         break;
  17.       case '[':
  18.         opened.push(']');
  19.         break;
  20.       case '{':
  21.         opened.push('}');
  22.         break;
  23.       default:
  24.         if (opened.empty()) return false;
  25.         if (opened.top() != elem) return false;
  26.         opened.pop();
  27.         break;
  28.     }
  29.   }
  30.   return opened.empty();
  31. }
  32.  
  33. int main0() {
  34.   std::string s;
  35.   std::cin >> s;
  36.   std::cout << (IsCorrectBracketSequence(s) ? "YES" : "NO");
  37.   return 0;
  38. }
  39.  
  40. struct Node {
  41.   int Value = 0;
  42.   Node* Next = nullptr;
  43. };
  44.  
  45. // Очередь на односвязном списке
  46. class Queue {
  47.  public:
  48.   bool Empty() const { return head == nullptr; }
  49.   void Enqueue(int value);
  50.   // Извлечение элемента. Если очередь пуста, возвращает -1.
  51.   int Dequeue();
  52.  
  53.  private:
  54.   Node* head = nullptr;
  55.   Node* tail = nullptr;
  56. };
  57.  
  58. void Queue::Enqueue(int value) {
  59.   // Добавляем в хвост.
  60.   Node* new_node = new Node;
  61.   new_node->Value = value;
  62.   if (Empty()) {
  63.     head = new_node;
  64.   } else {
  65.     tail->Next = new_node;
  66.   }
  67.   tail = new_node;
  68. }
  69.  
  70. int Queue::Dequeue() {
  71.   if (Empty()) return -1;
  72.   if (head == tail) tail = nullptr;
  73.   Node* next = head->Next;
  74.   int value = head->Value;
  75.   delete head;
  76.   head = next;
  77.  
  78.   return value;
  79. }
  80.  
  81. int main() {
  82.   int commands = 0;
  83.   std::cin >> commands;
  84.  
  85.   Queue q;
  86.   bool success = true;
  87.   while (commands--) {
  88.     int command = 0, value = 0;
  89.     std::cin >> command >> value;
  90.     switch (command) {
  91.       case 2:
  92.         success &= q.Dequeue() == value;
  93.         break;
  94.       case 3:
  95.         q.Enqueue(value);
  96.         break;
  97.     }
  98.   }
  99.   std::cout << (success ? "YES" : "NO");
  100.   return 0;
  101. }
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement