P1241 括号序列
P1241 括号序列
题解
谁解释下标签递推是个什么鬼,应该是暴力
数据比较小直接跑暴力
但是注意题目描述
也就是说:
[ ( ] )
是不合法的
补全应该是 [ ] ( [ ] )
举个栗子:
比如在找 “ ) ” 时,先找到了一个没有 ' ] ' 匹配的 ‘ [ ’ ,也就是说明出现了上述情况,即使后面找到了没有匹配的 "(" ,也不能算 “)”匹配了QAQ
代码
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<cmath> #include<cstdlib> #include<queue> using namespace std; inline int read() { int ans=0; char last=' ',ch=getchar(); while(ch<'0'||ch>'9') last=ch,ch=getchar(); while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar(); if(last=='-') ans=-ans; return ans; } string s; bool have[200]; int main() { while(cin>>s) { memset(have,0,sizeof(have)); for(int i=0;i<s.size() ;i++) { if(s[i]==')') { for(int j=i-1;j>=0;j--) { if(s[j]=='['&&have[j]==0) break; if(s[j]=='('&&have[j]==0) { have[j]=1; have[i]=1; break; } } } if(s[i]==']') { for(int j=i-1;j>=0;j--) { if(s[j]=='('&&have[j]==0) break; if(s[j]=='['&&have[j]==0) { have[j]=1; have[i]=1; break; } } } } for(int i=0;i<s.size() ;i++) { if(s[i]=='('&&have[i]==0) printf("%c)",s[i]); else if(s[i]==')'&&have[i]==0) printf("(%c",s[i]); else if(s[i]=='['&&have[i]==0) printf("%c]",s[i]); else if(s[i]==']'&&have[i]==0) printf("[%c",s[i]); else printf("%c",s[i]); } printf("\n"); } return 0; }