试的样例全过,只有60分,不知道少考虑了什么,求大佬指导
查看原帖
试的样例全过,只有60分,不知道少考虑了什么,求大佬指导
163136
w2721884598楼主2024/10/22 22:35
**#include<bits/stdc++.h>
using namespace std;
int main(){
string a,b="",l;//a表示原字符串,b是输出的字符串,l是每层“【】”里的字符串
cin>>a;
 int i=0,j=0,num=0,flag;//i,j表示从里到外每个【和】的下标
 for(j=0;j<a.length();j++){
 	if(a[j]=='['){
 		i=j;
 		num++;
	 }
 	if(a[j]==']')break;
 } 
 if(num==0)j=-1;
int k;
int pi=i,pj=j;//pi和pj保存前一次的数据
 while(num>0){
 	int i1=i+2;
 	if('0'<=a[i1]&&a[i1]<='9'){
 		l="";
		 k=(a[i+1]-'0')*10+(a[i1]-'0');
		 flag=0;
 		for(int o=i+3;o<j;o++){
 			
 		if(flag==0&&a[o]!='['&&a[o]!=']'){
 			l+=a[o];
			 }
		if(flag==2){
			l+=a[o];
		}
 		if(o==pi){
 			l+=b;
 			flag=1;
		 }
		 if(o==pj){
		 	flag=2;
		 }
		 }
		 b=l;
 		for(int o=1;o<k;o++)b+=l;
	 }else{ 
	 l="";
	 k=a[i+1]-'0';	
	 flag=0;
	 	for(int o=i+2;o<j;o++){			
 		if(flag==0&&a[o]!='['&&a[o]!=']'){
 			l+=a[o];
			 }
		if(flag==2){
			l+=a[o];
		}
 		if(o==pi){
 			l+=b;
 			flag=1;
		 }
		 if(o==pj){
		 	flag=2;
		 }
	 	}
	 	b=l;
 		for(int o=1;o<k;o++)b+=l;
	 }
	 num--;
	 if(num>0){
	pi=i,pj=j;
	 i--;
	 j++;
	 while(a[i]!='[')i--;
	 while(a[j]!=']')j++;
	 }
	 
 }
for(int o=i-1;o>=0;o--)b=a[o]+b;
for(int o=j+1;o<a.length();o++)b+=a[o];
 cout<<b;
	return 0; 
} 
2024/10/22 22:35
加载中...