Submission #63065

#TimeUsernameProblemLanguageResultExecution timeMemory
63065bazsi700괄호 문자열 (CEOI16_match)C++14
10 / 100
2041 ms632 KiB
#include <bits/stdc++.h> using namespace std; #define MOD 1000000007 #define ll long long int #define vi vector<int> #define vii vector< vector<int> > #define PI 3.1415926535897932384626433832795 #define INF 9223372036854775807LL //13:45 int cnt[2005][26]; vector<set<int> > occ(26); string s; int n; stack<int> sta; bool solve(int from, int to) { if(from > to) { return true; } if((to-from)%2 == 0) { return false; } //sta.push() // cout << from << " " << to << endl; for(int i = 0; i < 26; i++) { if((cnt[to][i]-(from == 0 ? 0 : cnt[from-1][i]))%2) { // cout << cnt[to][i] << endl; // cout << i << endl; return false; } } int star = s.at(from)-'a'; auto it = occ[star].upper_bound(to); it--; while(*it > from) { //cout << *it << " " << from << endl; bool s1 = solve(from+1,*it-1); if(!s1) { it--; continue; } bool s2 = solve(*it+1,to); if(!s2) { it--; continue; } return true; } //cout << *it << " " << from << endl; return false; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> s; n = s.length(); for(int i = 0; i < n; i++) { if(i != 0) { for(int j = 0; j < 26; j++) { cnt[i][j] = cnt[i-1][j]; } } occ[s.at(i)-'a'].insert(i); cnt[i][s.at(i)-'a']++; } //cout << solve(0,n-1) << endl; bool an = solve(0,n-1); if(!an) { cout << -1; return 0; } //return 0; if(n > 18) { return 0; } string str = "-1"; for(int mask = 0; mask < (1<<n); mask++) { stack<int> st; bool good = true; string currstr = ""; for(int i = 0; i < n; i++) { if(mask&(1<<i)) { st.push(i); currstr+= '('; } else { currstr+= ')'; if(st.empty()) { good = false; break; } if(s.at(st.top()) != s.at(i)) { good = false; break; } st.pop(); } } if(!st.empty()) { good = false; } if(good) { if(str.at(0) == '-' || str > currstr) { str = currstr; } } } cout << str; vector<int> cnt2(260,0); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...