제출 #1242831

#제출 시각아이디문제언어결과실행 시간메모리
1242831kaiboy괄호 문자열 (CEOI16_match)C++20
100 / 100
9 ms11336 KiB
// coached by rainboy #include <algorithm> #include <iostream> #include <cstring> using namespace std; const int N = 100000; const int A = 26; char aa[N + 1], bb[N + 1]; int pp[N], qq[N][A], ll[N], rr[N]; int main() { cin >> aa; int n = strlen(aa); for (int i = 0; i < n; i++) aa[i] -= 'a'; for (int i = 0; i < n; i++) { int a = aa[i], p = pp[i] = i ? qq[i - 1][a] : -1; for (int a = 0; a < A; a++) qq[i][a] = p > 0 ? qq[p - 1][a] : -1; qq[i][a] = i; } for (int cnt = 0, l = 0, r = n - 1; l < n; l++) { int a = aa[l]; if (qq[r][a] > l) { ll[cnt] = l, rr[cnt] = r, cnt++; bb[l] = '(', r = qq[r][a] - 1; continue; } if (!cnt || a != aa[ll[cnt - 1]]) { cout << "-1\n"; return 0; } bb[l] = ')', r = rr[--cnt]; } bb[n] = '\0'; cout << bb << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...