92pts+#5RE 求助

P1241 括号序列

Cure_Wing @ 2021-08-16 18:56:24

$\large\colorbox{white}{RE}$代码,求能人帮助: ```cpp #include<bits/stdc++.h> using namespace std; char s[555],st[555]; int t[555]; int sum,ssum; int StrReplace(char strRes[],char from[],char to[]){//至于这个不要管它--注 int flag=0; char *Ptr=NULL; char *middle_flag=strstr(strRes,from); if(middle_flag==NULL) return flag; int len=strlen(middle_flag); Ptr=(char*)malloc(len*sizeof(char)); if(NULL==Ptr) return flag; strcpy(Ptr,middle_flag+(strlen(from))); if(middle_flag!=NULL){ /* code */ *middle_flag='\0'; strcat(strRes,to); strcat(strRes,Ptr); free(Ptr); flag=1; } return flag; } void insert(char* s1,char* s2,int v){ int i,j; char *t=(char *)malloc(sizeof(char)*strlen(s1)+1); if(!t){ printf("Application memory failure...\n"); return; } for(i=v,j=0;t[j]=s1[i];j++,i++); for(i=v,j=0;s1[i]=s2[j];j++,i++); for(j=0;s1[i]=t[j];j++,i++); free(t); } int main(){ scanf("%s",s); strcpy(st,s); if(s==""){ puts(""); return 0; } for(int i=0;i<=strlen(s)-1;++i){ if(s[i]=='(') t[i]=1; if(s[i]=='[') t[i]=11; if(s[i]=='['&&s[i-1]=='(') t[i-1]=1; if(s[i]=='('&&s[i-1]=='[') t[i-1]=11; if(s[i]==')'){ if(i==0) t[i]=2; else if(s[i-1]=='(') t[i-1]=0; else if(s[i-1]==')'||s[i-1]==']'){ bool ff=1; for(int j=i-1;j>=0;--j) if(t[j]==1){ t[j]=0;ff=0; break; }else if(t[j]==11){ t[j]=11;t[i]=2;ff=0;break; } if(ff) t[i]=2; } else if(s[i-1]=='[') t[i-1]=11,t[i]=2; } if(s[i]==']'){ if(i==0) t[i]=12; else if(s[i-1]=='[') t[i-1]=0; else if(s[i-1]==']'||s[i-1]==')'){ bool ff=1; for(int j=i-1;j>=0;--j) if(t[j]==11){ t[j]=0;ff=0; break; }else if(t[j]==1){ t[j]=1;t[i]=12;ff=0;break; } if(ff) t[i]=12; } else if(s[i-1]=='(') t[i-1]=1,t[i]=12; } } int tx=0; for(int i=0;i<=strlen(s)-1;++i){ if(t[i]==1) insert(st,")",i+1+tx++); if(t[i]==2) insert(st,"(",i+tx++); if(t[i]==11) insert(st,"]",i+1+tx++); if(t[i]==12) insert(st,"[",i+tx++); } puts(st); return 0; } ``` 谢谢求助!

by liuqu1990717 @ 2021-10-23 01:06:59

像这样的代码:for(int i=0;i<=strlen(s)-1;++i) strlen函数不能放在for循环的第二个表达式中,strlen本身是O(n)的函数,再放进for循环直接变成O(n^2)了 第5个点RE主要是因为数组开小了。数组开到10005就OK了 我改了后,AC的 https://www.luogu.com.cn/record/60670483


|