Submission #981105

#TimeUsernameProblemLanguageResultExecution timeMemory
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...