Submission #1147140

#TimeUsernameProblemLanguageResultExecution timeMemory
1147140qrnMatch (CEOI16_match)C++20
100 / 100
16 ms23368 KiB
#include <bits/stdc++.h> using namespace std; #define SPEED ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); #define ALL(x) x.begin(), x.end() #define intt long long #define pb push_back #define endl "\n" const int sz = 3e6 + 5, L = 20; intt dp[sz][27]; bool valid(string& s) { stack<char>st; for(int i = 0; i < s.size(); i++) { if(!st.empty() && st.top() == s[i]) { st.pop(); } else{ st.push(s[i]); } } return st.empty(); } string ans, s; void rec(intt l, intt r) { if(l < r) { intt pos = dp[r][s[l] - 'a']; ans[l - 1] = '('; ans[pos - 1] = ')'; rec(l + 1, pos - 1); rec(pos + 1, r); } } void solve() { cin >> s; int n = s.size(); if(!valid(s)) { cout << -1 << endl; return; } ans.resize(n); s = '?' + s; bool ok = true; for(int i = 1; i <= n; i++) { for(int j = 0; j < 26; j++) { if(s[i] == char('a' + j)) { dp[i][j] = i; } else { int last = dp[i-1][s[i]-'a']; if(last > 0) { dp[i][j] = dp[last-1][j]; } } } } rec(1, n); cout << ans << endl; } int main() { SPEED; intt tst = 1; // cin >> tst; while (tst--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...