Submission #129415

#TimeUsernameProblemLanguageResultExecution timeMemory
129415PeppaPigMatch (CEOI16_match)C++14
37 / 100
2064 ms97640 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e5+5; int n, col[N]; char S[N], ans[N]; stack<int> st; map<stack<int>, int> M; vector<int> v[N]; void solve(int l, int r) { if(l > r) return; vector<int> &now = v[col[l]]; auto it = --upper_bound(now.begin(), now.end(), r); ans[l] = '(', ans[*it] = ')'; solve(l + 1, *it - 1), solve(*it + 1, r); } int main() { scanf("%s", S + 1); n = strlen(S + 1); int ptr = 0; for(int i = 1; i <= n; i++) { int c = S[i] - 'a', id; if(st.empty() || st.top() != c) { st.emplace(c); if(!M.count(st)) M[st] = ++ptr; id = M[st]; } else { id = M[st]; st.pop(); } col[i] = id; v[id].emplace_back(i); } if(st.size()) return !printf("-1\n"); solve(1, n); printf("%s\n", ans + 1); return 0; }

Compilation message (stderr)

match.cpp: In function 'int main()':
match.cpp:22:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s", S + 1);
     ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...