Advertisement
pasholnahuy

ZALUPA EBANAYA

Jun 11th, 2023
804
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <stack>
  4.  
  5. using namespace std;
  6.  
  7. bool CheckBracketCorrect(string &str) {
  8.     stack<char> br;
  9.     for (auto el: str) {
  10.         if (el == '(' || el == '[') {
  11.             br.push(el);
  12.         } else if (el == ')') {
  13.             if (!br.empty() && br.top() == '(') {
  14.                 br.pop();
  15.             } else {
  16.                 return false;
  17.             }
  18.         } else {
  19.             if (!br.empty() && br.top() == '[') {
  20.                 br.pop();
  21.             } else {
  22.                 return false;
  23.             }
  24.         }
  25.     }
  26.     if (br.empty()) {
  27.         return true;
  28.     }
  29.     return false;
  30. }
  31.  
  32. void
  33. PrintBracketPermutations(string cur_string, int n, int cur_len, vector<int> counts, vector<string> &add) {
  34.     if (counts[2] > counts[0] || counts[0] - counts[2] > n - cur_len || counts[3] > counts[1] ||
  35.         counts[1] - counts[3] > n - cur_len) {
  36.         return;
  37.     }
  38.     if (cur_len == n) {
  39.         if (CheckBracketCorrect(cur_string)) {
  40.             cout << cur_string << '\n';
  41.         }
  42.         return;
  43.     }
  44.     bool flag = false;
  45.     if (n - cur_len == counts[0] - counts[2]) {
  46.         flag = true;
  47.         ++counts[2];
  48.         PrintBracketPermutations(cur_string + add[2], n, cur_len + 1, counts, add);
  49.         --counts[2];
  50.     }
  51.     if (n - cur_len == counts[1] - counts[3]) {
  52.         flag = true;
  53.         ++counts[3];
  54.         PrintBracketPermutations(cur_string + add[3], n, cur_len + 1, counts, add);
  55.         --counts[3];
  56.     }
  57.     if (!flag) {
  58.         for (int i = 0; i < add.size(); ++i) {
  59.             ++counts[i];
  60.             PrintBracketPermutations(cur_string + add[i], n, cur_len + 1, counts, add);
  61.             --counts[i];
  62.         }
  63.     }
  64.  
  65. }
  66.  
  67. int main() {
  68.     int n;
  69.     cin >> n;
  70.     vector<string> add = {"(", "[", ")", "]"};
  71.     string cur_string;
  72.     vector<int> vec = {0, 0, 0, 0};
  73.     PrintBracketPermutations(cur_string, n, 0, vec, add);
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement