yszkddzyh @ 2023-02-01 21:15:59
WA第五个点,第一行输出了-1
#include <iostream>
#include <cstring>
#include <map>
#define N 101
using namespace std;
map<string,map<int,int> >val;
map<string,int>len;
map<string,bool>init_;
char s[N];
int f(char* str){
int l=strlen(str),p=0;
for(int i=0;i<l;i++){
if(str[i]<'0'||str[i]>'9') goto flag;
else p=p*10+((int)str[i]-'0');
}
return p;
flag:
char name[N]="",index[N]="";
int tot=0;
for(p=0;p<l&&str[p]!='[';p++) name[p]=str[p];
for(int i=p+1;i<l-1;i++) index[tot++]=str[i];
int tmp=f(index);
if(init_[name]&&tmp>=len[name]) printf("-1"),exit(0);
return val[name][tmp];
}
int main(){
while(true){
int l=0;
char c;
while(c=getchar()){//因为Linux换行符的问题,我手写的输入
if(c=='\n') l++;
if(c=='\n'||c==EOF) break;
if((c>='0'&&c<='9')||(c>='A'&&c<='Z')||(c>='a'&&c<='z')||c==' '||c=='['||c==']') s[l++]=c;
}
if(!l) return 0;
if(s[0]=='i'&&s[1]=='n'&&s[2]=='t'){
char name[N]="",id[N]="";
int i,tot=0;
for(i=4;i<l&&s[i]!='[';i++) name[i-4]=s[i];
for(int j=i+1;j<l-2;j++) id[tot++]=s[j];
len[name]=f(id),init_[name]=true;
}
else if(s[0]=='c'&&s[1]=='o'&&s[2]=='u'&&s[3]=='t'){
char sub[N]="";
for(int i=5;i<l;i++) sub[i-5]=s[i];
printf("%d\n",f(sub));
}
else if((s[0]>='A'&&s[0]<='Z')||(s[0]>='a'&&s[0]<='z')){
char name[N]="",id[N]="",sub1[N]="";
int i,space;
for(i=0;i<l&&s[i]!='[';i++) name[i]=s[i];
for(space=i+2;space<l&&s[space]!=' ';space++);
for(int j=i+1,tot=0;j<space-1;j++) id[tot++]=s[j];
for(int j=space+1,tot=0;j<l;j++) sub1[tot++]=s[j];
int t1=f(id);
if(t1>=len[name]) printf("-1"),exit(0);
val[name][t1]=f(sub1);
}
else exit(0);
memset(s,0,sizeof(s));
}
return 0;
}