제출 #51383

#제출 시각아이디문제언어결과실행 시간메모리
51383spencercompton괄호 문자열 (CEOI16_match)C++17
37 / 100
1780 ms16516 KiB
#include <bits/stdc++.h>
using namespace std;
string str;
int dp[2001][2001];
bool go(int s, int e){
	if(s>e){
		return true;
	}
	if(dp[s][e]!=-1){
		return dp[s][e]==1;
	}
	bool ret = false;
	for(int i = s+1; i<=e && !ret; i++){
		ret |= (str[s]==str[i]) && go(s+1,i-1)&&go(i+1,e);
	}
	if(ret){
		dp[s][e] = 1;
	}
	else{
		dp[s][e] = 0;
	}
	return ret;
}
string ans  = "";
void build(int s, int e){
	if(s>e){
		return;
	}
	for(int i = e; i>=s+1; i--){
		if(str[s]==str[i] && go(s+1,i-1) && go(i+1,e)){
			ans += "(";
			build(s+1,i-1);
			ans += ")";
			build(i+1,e);
			return;
		}
	}
	ans += "ERROR";
}
int main(){
	cin >> str;
	assert(str.length()<=2000);
	for(int a = 0; a<2001; a++){
		for(int b = 0; b<2001; b++){
			dp[a][b] = -1;
		}
	}
	if(go(0,str.length()-1)){
		build(0,str.length()-1);
		cout << ans<< endl;
	}
	else{
		cout << -1 << endl;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...