小模拟92分求调
查看原帖
小模拟92分求调
987530
_th_tw_on_楼主2024/8/20 09:59

rt,WA on #3

#include<bits/stdc++.h>
using namespace std;
string op,a,n;
map<string,int>s;
map<pair<string,int>,int>k;
int dfs(int x,string a){
	if((a[x]>='a'&&a[x]<='z')||(a[x]>='A'&&a[x]<='Z')){
		int j;
		string name="";
		for(j=x;;j++){
			if(a[j]=='[')break;
			name+=a[j];
		}
		int i=dfs(j+1,a);
		return k[{name,i}];
	}else if(a[x]>='0'&&a[x]<='9'){
		int num=0;
		for(int j=x;;j++){
			if(a[j]<'0'||a[j]>'9')break;
			num=num*10+a[j]-'0';
		}
		return num;
	}
}
int main(){
	while(cin>>op){
		n="";
		if(op=="int"){
			int i;
			cin>>a;
			for(i=0;;i++)if(a[i]=='[')break;else n+=a[i];
			int spc=dfs(i+1,a);s[n]=spc;
			for(i=0;i<spc;i++)k[{n,i}]=0;
		}else if(op=="cout"){
			int i;
			cin>>a;
			for(i=0;;i++)if(a[i]=='[')break;else n+=a[i];
			int xb=dfs(i+1,a);
			if(xb>=s[n]){cout<<-1;return 0;}
			cout<<k[{n,xb}]<<endl;
		}else{
			int i;
			cin>>a;
			for(i=0;;i++)if(op[i]=='[')break;else n+=op[i];
			int xba=dfs(i+1,op),xbb=0;
			if(xba>=s[n]){cout<<-1;return 0;}
			if(a[0]>='0'&&a[0]<='9'){
				for(i=0;i<a.size();i++)
					if(a[i]>='0'&&a[i]<='9')xbb*=10,xbb+=a[i]-'0';
				k[{n,xba}]=xbb;
			}else{
				string n2;
				for(i=0;;i++)if(a[i]=='[')break;else n2+=a[i];
				xbb=dfs(i+1,a);
				if(xbb>=s[n2]){cout<<-1;return 0;}
				k[{n,xba}]=k[{n2,xbb}];
			}
		}
	}
	return 0;
}
2024/8/20 09:59
加载中...