제출 #981105

#제출 시각아이디문제언어결과실행 시간메모리
981105Dzadzo괄호 문자열 (CEOI16_match)C++17
100 / 100
26 ms26976 KiB
#include <bits/stdc++.h> #define ll long long #define int ll #define pb push_back #define S second #define F first #define pii pair<int,int> #define vi vector <int> #define vvi vector <vi> #define vvvi vector <vvi> #define vp vector <pii> #define vvp vector <vp> #define vb vector <bool> #define vvb vector <vb>; #define INF LLONG_MAX #define MOD 1000000007 #define MAXN 100000 using namespace std; vvi dp(MAXN+1,vi(26)); string s; char ans[MAXN+1]; void solve(int l,int r){ if (l>r)return; ans[l]='('; int ind=dp[r][s[l]-'a']; ans[ind]=')'; solve(l+1,ind-1); solve(ind+1,r); } signed main(){ ios_base::sync_with_stdio(0),cin.tie(NULL),cout.tie(NULL); cin>>s; int n=s.size(); reverse(s.begin(),s.end()); s+=" "; reverse(s.begin(),s.end()); stack <int> st; for (int i=1;i<=n;i++){ if (!st.empty() && st.top()==s[i]-'a')st.pop(); else st.push(s[i]-'a'); } if (!st.empty())cout<<-1,exit(0); for (int i=1;i<=n;i++){ dp[i][s[i]-'a']=i; if (i==1 || dp[i-1][s[i]-'a']==0)continue; for (int j=0;j<26;j++)if (j!=s[i]-'a')dp[i][j]=dp[dp[i-1][s[i]-'a']-1][j]; } solve(1,n); 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...