玄关 求条 全wa

P2830 写程序

whr_AK_j @ 2024-10-23 22:51:35

#include<bits/stdc++.h>
using namespace std;
map<string,int>mp;
map<string,int>uid;
char a[100005+10][1005];
int b[100005+10][1005];
int len[100005+10];
int n=1,v;
string ss;
int dfs(string s)
{
    if(s[0]<='9'&&'0'<=s[0])
    {
        int cnt=0;
        for(int i=0;i<(int)s.size();i++)
        {
            cnt*=10;
            cnt+=(s[i]-'0');
        }
        return cnt;
    }
    string cnt,x;
    int sum=0,pre;
    for(int i=0;i<(int)s.size();i++)
    {
        if(s[i]=='[')
        {
            pre=i+1;
            break;
        }
        x+=s[i];
    }
    for(int i=pre;i<(int)s.size()-1;i++)
    {
        if(s[i]==']')
        {
            sum--;
            if(sum==0)
            {
                cnt+=s[i];
                break;
            }
        }
        if(s[i]=='[')sum++;
        cnt+=s[i];
    }
    int m=dfs(cnt);
    if(m>=mp[x])
    {
        cout<<-1;
        exit(0);
    }   
    return b[uid[x]][m];
}
int main()
{
    while(gets(a[n]))
    {
        len[n]=strlen(a[n]);
        n++;
    }
    n--;
    for(int id=1;id<=n;id++)
    {
        if(a[id][0]=='i')
        {
            string s;
            int pre,cnt=0;
            for(int x=4;x<len[id];x++)
            {
                if(a[id][x]=='[')
                {
                    pre=x+1;
                    break;
                }
                s+=a[id][x];
            }
            for(int x=pre;x<len[id]-1;x++)
            {
                cnt*=10;
                cnt+=(a[id][x]-'0');
            }
            mp[s]=cnt;
            uid[s]=++v;
        }
        else if(a[id][0]=='c')
        {
            string s,cnt;
            int pre;
            for(int i=5;i<len[id];i++)
            {
                if(a[id][i]=='[')
                {
                    pre=i+1;
                    break;
                }
                s+=a[id][i];
            }
            int sum=0;
            for(int i=pre;i<len[id]-1;i++)
            {
                if(a[id][i]==']')
                {
                    if(sum==0)
                    {
                        pre=i+3;
                        break;                      
                    }
                    sum--;
                }
                if(a[id][i]=='[')sum++;
                cnt+=a[id][i];
            }
            int w=dfs(cnt);
            cout<<b[uid[s]][w]<<"\n";
        }
        else 
        {
            string s,cnt;
            int pre,x=0;
            for(int i=0;i<len[id];i++)
            {
                if(a[id][i]=='[')
                {
                    pre=i+1;
                    break;
                }
                s+=a[id][i];
            }
            int sum=0;
            for(int i=pre;i<len[id];i++)
            {
                if(a[id][i]==']')
                {
                    if(sum==0)
                    {
                        pre=i+2;
                        break;                      
                    }
                    sum--;
                }
                if(a[id][i]=='[')sum++;
                cnt+=a[id][i];
            }
            for(int i=pre;i<len[id];i++)
            {
                x*=10;
                x+=(a[id][i]-'0');
            }
            int m;
            m=dfs(cnt);
            if(m>=mp[s])
            {
                cout<<-1<<"\n";
                return 0;
            }
            b[uid[s]][m]=x;
        }
    }
    return 0;
}

|