Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <stack>
- // true, если строка s является ПСП
- // false, иначе
- bool IsCorrectBracketSequence(const std::string& s) {
- // Соответствующие открытым закрывающие скобки, которые ожидаем обнаружить в строке
- std::stack<char> opened;
- auto n = s.size();
- for (int i = 0; i < n; ++i) {
- char elem = s[i];
- switch (elem) {
- case '(':
- opened.push(')');
- break;
- case '[':
- opened.push(']');
- break;
- case '{':
- opened.push('}');
- break;
- default:
- if (opened.empty()) return false;
- if (opened.top() != elem) return false;
- opened.pop();
- break;
- }
- }
- return opened.empty();
- }
- int main0() {
- std::string s;
- std::cin >> s;
- std::cout << (IsCorrectBracketSequence(s) ? "YES" : "NO");
- return 0;
- }
- struct Node {
- int Value = 0;
- Node* Next = nullptr;
- };
- // Очередь на односвязном списке
- class Queue {
- public:
- bool Empty() const { return head == nullptr; }
- void Enqueue(int value);
- // Извлечение элемента. Если очередь пуста, возвращает -1.
- int Dequeue();
- private:
- Node* head = nullptr;
- Node* tail = nullptr;
- };
- void Queue::Enqueue(int value) {
- // Добавляем в хвост.
- Node* new_node = new Node;
- new_node->Value = value;
- if (Empty()) {
- head = new_node;
- } else {
- tail->Next = new_node;
- }
- tail = new_node;
- }
- int Queue::Dequeue() {
- if (Empty()) return -1;
- if (head == tail) tail = nullptr;
- Node* next = head->Next;
- int value = head->Value;
- delete head;
- head = next;
- return value;
- }
- int main() {
- int commands = 0;
- std::cin >> commands;
- Queue q;
- bool success = true;
- while (commands--) {
- int command = 0, value = 0;
- std::cin >> command >> value;
- switch (command) {
- case 2:
- success &= q.Dequeue() == value;
- break;
- case 3:
- q.Enqueue(value);
- break;
- }
- }
- std::cout << (success ? "YES" : "NO");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement