Submission #226182

#TimeUsernameProblemLanguageResultExecution timeMemory
226182super_j6Match (CEOI16_match)C++14
100 / 100
19 ms9984 KiB
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <vector> using namespace std; #define endl '\n' #define ll long long #define pi pair<int, int> #define f first #define s second const int maxn = 100001, k = 26; int n; string s; int it[maxn], l[maxn], p[maxn]; int tr[maxn][k]; vector<int> v[maxn]; int m = 1; string ret; void solve(int l, int r){ if(l > r) return; int x = *--upper_bound(v[it[l]].begin(), v[it[l]].end(), r); ret[l - 1] = '(', ret[x] = ')'; solve(l + 1, x), solve(x + 2, r); } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin >> s; n = s.size(); l[0] = -1; for(int i = 1; i <= n; i++){ int c = s[i - 1] - 'a'; if(l[it[i - 1]] == c){ it[i] = p[it[i - 1]]; }else{ if(!tr[it[i - 1]][c]) tr[it[i - 1]][c] = m++; p[it[i] = tr[it[i - 1]][c]] = it[i - 1]; l[it[i]] = c; } v[it[i]].push_back(i); } if(it[n]){ cout << -1 << endl; }else{ ret.resize(n); solve(1, n); cout << ret << endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...