Ankit_132

Greedy

Jun 7th, 2023
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. #define ll     long long
  7. #define _test   int _TEST; cin>>_TEST; while(_TEST--)
  8. #define ff     first
  9. #define ss     second
  10. #define pb     push_back
  11.  
  12. int main()
  13. {
  14.     _test
  15.     {
  16.         int n;
  17.         string s;
  18.         cin>>n>>s;
  19.  
  20.         vector<int> v;
  21.  
  22.         for(int i=0; i<n;)
  23.         {
  24.             int j = i+1;
  25.             while(j<n && s[i]==s[j])
  26.                 j++;
  27.  
  28.             v.pb(j-i);
  29.             i = j;
  30.         }
  31.  
  32.         int tot = accumulate(v.begin(), v.end(), 0);
  33.  
  34.         if(n%2 || tot%2)
  35.         {
  36.             cout<<"NO\n";
  37.             continue;
  38.         }
  39.  
  40.         vector<vector<int>> dp(n+10, vector<int> (n+10, -1));
  41.  
  42.         dp[v.size()][0] = 1;
  43.  
  44.         function<int(int, int)> check = [&](int ind, int value)
  45.         {
  46.             if(ind == v.size())
  47.                 return (int)(value == 0);
  48.  
  49.             if(dp[ind][value] != -1)        return dp[ind][value];
  50.  
  51.             int x = 0;
  52.             int y = 0;
  53.  
  54.             x = check(ind+1, value+v[ind]);
  55.  
  56.             if(value-v[ind] >= 0)     y = check(ind+1, value-v[ind]);
  57.  
  58.             return dp[ind][value] = (x|y);
  59.         };
  60.  
  61.         if(check(1, v[0]))
  62.         {
  63.             cout<<"YES\n";
  64.  
  65.             n = v.size();
  66.             string ans = "";
  67.  
  68.             for(int i=0; i<v[0]; i++)       ans += '(';
  69.  
  70.             int value = v[0];
  71.  
  72.             for(int i=1; i<n; i++)
  73.             {
  74.                 if(dp[i+1][value+v[i]] == 1)
  75.                 {
  76.                     for(int j=0; j<v[i]; j++)       ans += '(';
  77.                     value += v[i];
  78.                 }
  79.                 else
  80.                 {
  81.                     for(int j=0; j<v[i]; j++)       ans += ')';
  82.                     value -= v[i];
  83.                 }
  84.             }
  85.             cout<<ans<<"\n";
  86.         }
  87.         else
  88.             cout<<"NO\n";
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment