Advertisement
playerr17

Untitled

Dec 11th, 2022
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.73 KB | None | 0 0
  1. deque<int> first, last;
  2. bool left_is_open = true, right_is_open = true;
  3.  
  4. void balance() {
  5.     while (first.size() > last.size() + 1) {
  6.         last.push_back(first.back());
  7.         first.pop_back();
  8.     }
  9.     while (last.size() > first.size()) {
  10.         first.push_back(last.back());
  11.         last.pop_back();
  12.     }
  13. }
  14.  
  15. void check(bool ff) {
  16.     if (ff) {
  17.         if (first.size() >= last.size() + 1) {
  18.             last.push_back(first.back());
  19.             first.pop_back();
  20.         }
  21.     } else {
  22.         if (last.size() >= first.size() + 1) {
  23.             first.push_back(last.back());
  24.             last.pop_back();
  25.         }
  26.     }
  27. }
  28.  
  29. void solve() {
  30.     int n;
  31.     cin >> n;
  32.     string str;
  33.     cin >> str;
  34.     int cnt = 1;
  35. //    int ans1 = 0, ans2 = 0;
  36.     deque<int> a, b;
  37.     forn(i, 0, n) {
  38.         if (str[i] == 'a') {
  39.             if (left_is_open && right_is_open) {
  40.                 first.push_back(cnt++);
  41.             } else {
  42.                 last.push_front(cnt++);
  43. //                balance();
  44.             }
  45.         } else if (str[i] == 'b') {
  46.             if (left_is_open && right_is_open) {
  47.                 last.push_back(cnt++);
  48.             } else {
  49.                 first.push_front(cnt++);
  50. //                balance();
  51.             }
  52.  
  53.         } else if (str[i] == 'A') {
  54.             int res = 0;
  55.             if (!first.empty()) {
  56.                 res = first.front();
  57.                 first.pop_front();
  58.             } else {
  59.                 res = last.back();
  60.                 last.pop_back();
  61.             }
  62. //            ans1 = res;
  63. //            dbg(res);
  64.             cout << res % 10;
  65.         } else if (str[i] == 'B') {
  66.             int res = 0;
  67.             if (!last.empty()) {
  68.                 res = last.front();
  69.                 last.pop_front();
  70.             } else {
  71.                 res = first.back();
  72.                 first.pop_back();
  73.             }
  74. //            balance();
  75. //            ans1 = res;
  76. //            dbg(res);
  77.             cout << res % 10;
  78.         } else if (str[i] == '>') {  // 1
  79.             left_is_open = false;
  80.             balance();
  81.         } else if (str[i] == ']') {  // 2
  82.             right_is_open = false;
  83.             balance();
  84.         } else if (str[i] == '<') {  // 1
  85.             left_is_open = true;
  86.             balance();
  87.             check(true);
  88.         } else if (str[i] == '[') {  // 2
  89.             right_is_open = true;
  90.             balance();
  91.             check(false);
  92.         }
  93. //        cout << "frst\n";
  94. //        for (int cf: first) {
  95. //            cout << cf << ' ';
  96. //        }
  97. //        cout << "\nlast\n";
  98. //        for (int cf: last) {
  99. //            cout << cf << ' ';
  100. //        }
  101. //        cout << '\n';
  102.     }
  103.     cout << endl;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement