本题第一篇求助帖

P2830 写程序

AlgoEmperor @ 2018-10-22 14:53:36

只得了一半的分

#include <bits/stdc++.h>
#define MAX (10000+5)
using namespace std;

struct Array
{
    int val[105],N;
}array[MAX];

struct Pir
{
    int x,y;
};

string s;
int N;
map <string,int> Map;
Pir pir;

inline int change(string s)
{
    int ans=0;
    for (int i=0; i<s.size(); i++)
        ans*=10,
        ans+=s[i]-48;
    return ans;
}

inline int find(string s)
{
    int flag=0,l=0;
    for (int i=0; i<s.size(); i++)
        if (s[i]=='[')
        {
            flag=1;
            l=i;
            break;
        }
    if (!flag)
        return change(s);
    int ord=Map[s.substr(0,l+1)];
    int idx=find(s.substr(l+1,s.size()-l-2));
    if (idx>array[ord].N)
    {
        cout<<-1<<endl;
        exit(0);
    }
    pir.x=ord; pir.y=idx;
    return array[ord].val[idx];
}

int main()
{
    while (cin>>s)
    {
        if (s=="int")
        {
            int l=0,r=0;
            cin>>s;
            for (register int i=0; i<s.size(); i++)
                if (s[i]=='[') l=i;
            Map[s.substr(0,l)]=++N;
            array[N].N=find(s.substr(l+1,s.size()-l-2));
        }
        else if (s=="cout")
        {
            cin>>s;
            cout<<find(s)<<endl;
        }
        else
        {
            find(s);
            int x=pir.x;
            int y=pir.y;
            cin>>s;
            array[x].val[y]=find(s);
        }
    }
}

by QingD @ 2021-10-30 11:59:30

烤骨


|