记录编号 |
550221 |
评测结果 |
AAAAAAAAAA |
题目名称 |
天天和不可描述 |
最终得分 |
100 |
用户昵称 |
夜莺 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.052 s |
提交时间 |
2020-03-05 16:57:38 |
内存使用 |
8.16 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=500010;
char see[MAXN];
int left[MAXN],right[MAXN],be[MAXN];
int lis;
void back(int head,int tail){
if(head==tail)
if(see[head]!='('){
printf("%c",see[head]);
return;
}
if(head<=tail){
while(head<=tail){
if(see[head]!='('){
if(see[head]!=')')
printf("%c",see[head]);
}
else{
if(right[head]-1>=head+1){
back(right[head]-1,head+1);
head=right[head];
}
}
head++;
}
}
else{
while(head>=tail){
if(see[head]!=')'){
if(see[head]!='(')
printf("%c",see[head]);
}
else{
if(left[head]+1<=head-1){
back(left[head]+1,head-1);
head=left[head];
}
}
head--;
}
}
}
int main(){
freopen("unknown.in","r",stdin);
freopen("unknown.out","w",stdout);
scanf("%s",see);
int see_long=strlen(see);
for(int i=0;i<see_long;i++){
if(see[i]=='('){
be[++lis]=i;
}
if(see[i]==')'){
right[be[lis]]=i;
left[i]=be[lis--];
}
}
back(0,see_long-1);
return 0;
}