답안 #51381

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
51381 2018-06-17T18:45:23 Z spencercompton 괄호 문자열 (CEOI16_match) C++17
10 / 100
2000 ms 16240 KB
#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;
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 15992 KB Output is correct
2 Correct 15 ms 16104 KB Output is correct
3 Correct 13 ms 16104 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 15992 KB Output is correct
2 Correct 15 ms 16104 KB Output is correct
3 Correct 13 ms 16104 KB Output is correct
4 Correct 119 ms 16184 KB Output is correct
5 Correct 18 ms 16240 KB Output is correct
6 Execution timed out 2041 ms 16240 KB Time limit exceeded
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 15992 KB Output is correct
2 Correct 15 ms 16104 KB Output is correct
3 Correct 13 ms 16104 KB Output is correct
4 Correct 119 ms 16184 KB Output is correct
5 Correct 18 ms 16240 KB Output is correct
6 Execution timed out 2041 ms 16240 KB Time limit exceeded
7 Halted 0 ms 0 KB -