求助 92pts WA#5(第一次)
查看原帖
求助 92pts WA#5(第一次)
677878
taotengyue楼主2024/9/4 15:50

代码如下(#5在第一行输出0)

#include<bits/stdc++.h>
using namespace std;
//#define int long long
const int N=1e5+5;
string a,b;
map<string,int>mp;
struct node
{
	string name;
	int a[105],cnt;
}f[N];
int cnt,flag=1;
int str_int(string s)
{
	return atoi(s.c_str());
}
int g(string s)
{
	if(s[0]>='0'&&s[0]<='9')
	return str_int(s);
	for(int i=0;i<s.size();++i)
	{
		if(s[i]=='[')
		{
			int p=g(s.substr(i+1,s.size()-i-2)),q=mp[s.substr(0,i)];
			if(p>=f[q].cnt)
			{
				puts("-1");
				exit(0);
			}
//			cout<<s.substr(0,i)<<' '<<p<<endl;
			return f[q].a[p];
		}
	}
}
signed main()
{
//	std::ios_base::sync_with_stdio(false);
	while(cin>>a)
	{
		cin>>b;
		if(a=="int")
		{
			++cnt;
			for(int i=0;i<b.size();++i)
			{
				if(b[i]=='[')
				{
					f[cnt].name=b.substr(0,i);
					mp[f[cnt].name]=cnt;
					memset(f[cnt].a,0,sizeof(f[cnt].a));
					f[cnt].cnt=g(b.substr(i+1,b.size()-i-2));
//					cout<<f[cnt].cnt<<endl;
					break;
				}
			}
		}else if(a=="cout")
		{
			cout<<g(b)<<endl;flag=0;
		}else
		{
			for(int i=0;i<a.size();++i)
			{
				if(a[i]=='[')
				{
					int q=mp[a.substr(0,i)],p=g(a.substr(i+1,a.size()-i-2));
					if(p>=f[q].cnt)
					{
						puts("-1");
						exit(0);
					}
					f[q].a[p]=str_int(b);
					break;
				}
			}
		}
	}
	if(flag)cout<<-1;
    return 0;
} 
2024/9/4 15:50
加载中...