33分求助,在线等

P2830 写程序

Mine_King @ 2020-08-21 19:47:34

RT,#3,#4,#8,#9AC,其他都 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

看题解吧


|