Submission #51381

#TimeUsernameProblemLanguageResultExecution timeMemory
51381spencercomptonMatch (CEOI16_match)C++17
10 / 100
2041 ms16240 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; 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 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)){
			string ret = "(" + build(s+1,i-1) + ")" + build(i+1,e);
			return ret;
		}
	}
	return "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)){
		cout << build(0,str.length()-1) << endl;
	}
	else{
		cout << -1 << endl;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...