제출 #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...