제출 #1117650

#제출 시각아이디문제언어결과실행 시간메모리
1117650HasanV11010238괄호 문자열 (CEOI16_match)C++17
0 / 100
1 ms336 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long mt19937_64 rnd(time(0)); vector<vector<ll>> ve; vector<ll> ha, pr; vector<char> ans; void rec(int l, int r, int ind){ if (l > r){ return; } ll nl = l, nr = r; while ((pr[ve[ind][nr]] ^ pr[ve[ind][nl] - 1]) != 0){ nr -= 2; } ans[ve[ind][nr]] = ')'; ans[ve[ind][nl]] = '('; rec(nr + 1, r, ind); rec(nl + 1, nr - 1, ind); } int main(){ string s; cin>>s; int n = s.size(); s = " " + s; ve.resize(26), ha.assign(26, 0), pr.assign(n + 1, 0), ans.assign(n + 1, -1); for (int i = 0; i < 26; i++){ ha[i] = rnd(); } for (int i = 1; i <= n; i++){ pr[i] = pr[i - 1] ^ ha[s[i] - 'a']; ve[s[i] - 'a'].push_back(i); } deque<int> de; for (int i = 1; i <= n; i++){ int ch = s[i] - 'a'; if (de.size() == 0 || de.back() != ch){ de.push_back(ch); } else{ de.pop_back(); } } if (de.size() != 0){ cout<<-1; } else{ for (int i = 0; i < 26; i++){ rec(0, ve[i].size() - 1, i); } for (int i = 1; i <= n; i++){ cout<<ans[i]; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...