admin管理员组

文章数量:1530882

题目链接:点击打开链接

题目大意:略。

解题思路:注意:“return 0;” 的时候别只输了个 “return” 就退出了,要输完,否则 T-- 会消耗掉一次,导致结果WA。

AC 代码

#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a)
#define INF 0x3f3f3f3f

using namespace std;

typedef long long ll;

struct node
{
    int len,flag; // 数组长度 是否泄漏
    string txt,name; // 内容 数组名
}nds[11000];

map<string,int> mp;
map<string,int>::iterator itmp;


void init()
{
    mp.clear();
}

void showNode(int op,string name)
{
    itmp=mp.begin();
    while(itmp!=mp.end())
    {
        if(op==1)
        {
            node nd=nds[itmp->second];
            cout<<nd.name<<": ";
            cout<<nd.len<<endl;
            puts("------------------------------");
        }
        else if(op==2)
        {
            if(itmp->first==name)
            {
                node nd=nds[itmp->second];
                cout<<nd.name<<": "<<endl;
                cout<<"len: "<<nd.len<<endl;
                cout<<"flag: "<<nd.flag<<endl;
                cout<<"txt: "<<nd.txt<<endl;
                puts("------------------------------");
            }
        }
        itmp++;
    }
}

int main()
{
    int T; scanf("%d",&T);
    int n;
    string s,ss,sss;
    while(T--)
    {
        init();
        int nlen=0;
        while(1)
        {
            cin>>s;
            char op=s[3];
            if(op=='r') // char
            {
                while(cin>>ss)
                {
                    char name[11000];
                    int len=ss.length(),k=0;
                    int i;
                    for(i=0;i<len;i++)
                    {
                        if(ss[i]=='[')
                        {
                            name[k++]='\0';
                            break;
                        }
                        else
                            name[k++]=ss[i];
                    }

                    int sum=0;
                    for(++i;i<len;i++)
                    {
                        if(ss[i]==']')
                            break;
                        else
                            sum=sum*10+(ss[i]-'0');
                    }

                    node nd; nd.flag=0,nd.len=sum,nd.txt="",nd.name=string(name);
                    mp[nd.name]=++nlen;
                    nds[nlen]=nd;

                    if(ss[len-1]==';') break;
                }

//                showNode(1,"");

            }
            else if(op=='s') // gets
            {
                cin>>ss; getchar();
                getline(cin,sss);
                int len=sss.length();
                node &nd=nds[mp[ss]];
                if(len>=nd.len)
                {
                    nd.flag=1;
                    nd.txt=sss.substr(0,nd.len);
                }
                else
                {
                    nd.flag=0;
                    nd.txt=sss;
                }

//                showNode(2,ss);
            }
            else if(op=='t') // cout
            {
                cin>>ss;
                int i=mp[ss];
                while(i<=nlen)
                {
                    node nd=nds[i];
                    cout<<nd.txt;
                    if(nd.flag==1)
                        i++;
                    else
                        break;
                }
                puts("");
            }
            else if(op=='u') // return
            {
                cin>>ss;
                break;
            }
        }

    }

    return 0;
}

本文标签: ZCMUleakMemory