Submission #1294102

#TimeUsernameProblemLanguageResultExecution timeMemory
1294102dragonrobotMatch (CEOI16_match)C++17
0 / 100
0 ms332 KiB
#include <bits/stdc++.h> using namespace std; int main() { string s; cin >> s; int n = s.length(); if (n % 2 != 0) { cout << -1; return 0; } vector<int> v(n, -1); vector<stack<int>> c(26); for (int i = 0; i < n; i++) { int x = s[i] - 'a'; if (c[x].empty()) c[x].push(i); else { int j = c[x].top(); c[x].pop(); v[i] = j; v[j] = i; } } for (int i = 0; i < 26; i++) if (!c[i].empty()) { cout << -1; return 0; } map<pair<int,int>, string> m; auto f = [&](auto&& self, int i, int j) -> string { if (i > j) return ""; if (m.count({i,j})) return m[{i,j}]; string a = "-1"; if (v[i] == j) { string t = self(self, i+1, j-1); if (t != "-1") a = "(" + t + ")"; } string b = "-1"; int k = v[i]; if (k < j) { string l = self(self, i, k); string r = self(self, k+1, j); if (l != "-1" && r != "-1") { string t = l + r; if (b == "-1" || t < b) b = t; } } string r = "-1"; if (a != "-1") r = a; if (b != "-1" && (r == "-1" || b < r)) r = b; return m[{i,j}] = r; }; cout << f(f, 0, n-1); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...