Submission #1214635

#TimeUsernameProblemLanguageResultExecution timeMemory
1214635AzeTurk810Match (CEOI16_match)C++20
100 / 100
18 ms22840 KiB
/*
   Alone again
   Telebe of adicto yani AzeTurk810
   Lost on you
*/
#include <iostream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
using ll = long long;
using ull = unsigned long long;

#define ln '\n'
#define INFi 1e9
#define INFll 1e18
#define MOD int(1e9 + 7)
#define int ll

int n;

vector<vector<int>> dp;

bool is_valid(string &s) {
    stack<int> st;
    for(int i = 0; i < n; i++) {
        if(st.empty()) {
            st.push(s[i]);
        } else if(st.top() == s[i]) {
            st.pop();
        } else {
            st.push(s[i]);
        }
    }
    return st.empty();
}

string ans;

void build_dp(string &s) {
    for(int i = 0; i < n ; i ++) {
        for(int c = 0 ; c < 26 ; c++) {
            if(s[i] - 'a' == c) {
                dp[c][i] = i;
            } else {
                if(i != 0 && dp[s[i] - 'a'][i - 1] > 0) {
                    dp[c][i] = dp[c][dp[s[i] - 'a'][i - 1] - 1];
                }
            }
        }
    }
}

string s;

void ask(int l , int r) {
    if(l >= r) return;
    int x = dp[s[l] - 'a'][r];
    ans[l] = '(';
    ans[x] = ')';
    ask(l + 1 , x - 1);
    ask(x + 1 , r);
}

void solve() {
    cin >> s;
    n = s.size();
    ans.resize(n , '$');
    if(!is_valid(s)) {
        cout << -1 << ln;
        return;
    }
    dp.assign(26 , vector<int> (n , -1));
    build_dp(s);
    ask(0 , n - 1);
    cout << ans << ln;
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    while(t--) solve();
}
//    
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...