제출 #30695

#제출 시각아이디문제언어결과실행 시간메모리
30695zscoder괄호 문자열 (CEOI16_match)C++14
0 / 100
0 ms26704 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define fi first #define se second #define mp make_pair #define pb push_back #define fbo find_by_order #define ook order_of_key typedef long long ll; typedef pair<int,ll> ii; typedef vector<int> vi; typedef long double ld; typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> pbds; typedef set<ll>::iterator sit; typedef map<ll,ll>::iterator mit; bool dp[5011][5011]; bool ok(int l, int r) { if(l>r) return 1; return dp[l][r]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); string s; cin>>s; int n=s.length(); for(int i=0;i<n;i++) { stack<char> S; for(int j=i;j<n;j++) { if(!S.empty()&&S.top()==s[j]) { S.pop(); } else S.push(s[j]); if(S.empty()) { //cerr<<i<<' '<<j<<'\n'; dp[i][j]=1; } } } stack<int> dq; for(int i=0;i<n;i++) dq.push(n); for(int i=0;i<n;i++) { bool pos=0; if(s[i]>='a'&&s[i]<='z') { while(!dq.empty()&&i>dq.top()) dq.pop(); for(int j=n-1;j>i;j--) { //cerr<<ok(i+1,j-1)<<' '<<ok(j+1,n-1)<<'\n'; //if(dq.empty()) return 0; if(s[i]==s[j]&&ok(i+1,j-1)&&ok(j+1,dq.top()-1)) { s[i]='('; s[j]=')'; dq.push(j); pos=1; break; } } if(!pos) { cout<<-1<<'\n'; return 0; } } } cout<<s<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...