Mine_King @ 2020-08-21 19:47:34
RT,#3
,#4
,#8
,#9
AC,其他都 WA
#include<map>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<iostream>
using namespace std;
bool flag=true;
string opt;
struct node
{
int len;
int num[105];
};
map<string,node>mp;
int dfs(int now)
{
if(opt[now]>='0'&&opt[now]<='9')
{
int x=0;
for(int i=now;i<(int)opt.length();i++)
{
if(opt[i]==']') break;
x=x*10+(opt[i]-'0');
}
return x;
}
string s="";
int i;
for(i=now;i<(int)opt.length();i++)
{
if(opt[i]=='[') break;
s.push_back(opt[i]);
}
int k=dfs(i+1);
if(k>=mp[s].len)
{
printf("-1\n");
exit(0);
}
return mp[s].num[k];
}
void yuju(int op,string bl,string zhi)
{
int k;
if(op==3)
{
opt=zhi;
k=dfs(0);
}
for(int i=0;i<(int)bl.length();i++)
if(bl[i]=='[')
{
string s=bl.substr(0,i);
opt=bl.substr(i+1);
int n=dfs(0);
if(op>1&&n>=mp[s].len)
{
printf("-1\n");
exit(0);
}
if(op==1) mp[s]=(node){n,{}};
else if(op==2) printf("%d\n",mp[s].num[n]);
else mp[s].num[n]=k;
break;
}
return ;
}
int main()
{
string ss;
while(getline(cin,ss))
{
string s;
int m;
string op="";
for(m=0;ss[m]!=' ';m++) op.push_back(ss[m]);//获得这一段前面那部分
if(op=="int") yuju(1,ss.substr(m+1),"");
else if(op=="cout") yuju(2,ss.substr(m+1),"");
else yuju(3,op,ss.substr(m+1));
}
return 0;
}
by Chinese_zjc_ @ 2020-08-21 19:54:43
看题解吧