代码如下(#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;
}