제출 #1293825

#제출 시각아이디문제언어결과실행 시간메모리
1293825oruc괄호 문자열 (CEOI16_match)C++20
0 / 100
1 ms568 KiB
/// designed by Oruc Cabbarli #pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define int long long #define vi vector<int> #define pii pair<int,int> #define vpii vector<pii> #define fi first #define se second #define pb push_back #define all(v) v.begin(), v.end() #define endl '\n' template<typename T>void show(vector<T> &v){ for(auto &i: v){ cout << i << ' '; } cout << endl; } const int N = 1e5+5; const int INF = 1e18; const int LOG = 20; const int MOD = 1e9+7; string check(vi v, string b, int l, int r){ stack<pair<char,int>> st; for(int i = l; i <= r; i++){ if(b[i] == '('){ st.push({'(',v[i]}); } else{ if(st.top().fi == '(' && st.top().se == v[i]){ st.pop(); } else{ return "-1"; } } } if(st.size()){ return "-1"; } else{ return b; } } void solve(){ string s; cin >> s; int n = s.size(); vector<set<int>> idx(26); if(n % 2){ cout << -1 << endl; return; } for(int i = 0; i < n; i++){ idx[s[i]-97].insert(i); } string b = string(n,' '); int cnt = 1; vector<int> use(n); for(int i = 0; i < n; i++){ if(use[i]) continue; int c = s[i]-97; idx[c].erase(i); if(idx[c].empty()){ cout << -1 << endl; return; } int x = *idx[c].rbegin(); idx[c].erase(--idx[c].end()); b[i] = '('; b[x] = ')'; use[x] = cnt; use[i] = cnt; cnt++; } cout << check(use,b,0,n-1) << endl; } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t = 1; //cin >> t; for(int i = 1; i <= t; i++){ //cout << "Case #" << i << ": "; solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...