1. 程式人生 > >zcmu 2018 Memory leak(模擬)

zcmu 2018 Memory leak(模擬)

【題目】

【題意】

搞了一個小時發現題意理解錯了orz這是什麼神仙題目。

關鍵點在於當一個字串比預期的長的時候會訪問下一個記憶體,直到記憶體長度滿足預期。

做出來還是很開心的哇!!!!

【思路】

模擬。三個map用來關聯變數名、序號、長度和存入的內容。

【程式碼】

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <map>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <iostream>
#define go(i,a,b) for(int i=a;i<=b;i++)
#define og(i,a,b) for(int i=a;i>=b;i--)
#define mem(a) memset(a,0,sizeof(a))
using namespace std;
map <string,int> si;
map <int,int> len;
map <int,string> is;
string s,name,na;
main()
{
    int t; scanf("%d",&t);
    getchar();
    while(t--)
    {
        int c=0; si.clear();is.clear();len.clear();
        while(getline(cin,s))
        {
            if(s[3]=='u') break;
            int l=s.size(),i=5;
            if(s[3]=='r')
            {
               while(i<l)
               {
                   name=s[i++];
                   while(s[i]!='[') name+=s[i++];
                   si[name]=c;
                   int ll=0; i++;
                   while(s[i]>='0'&&s[i]<='9') ll=ll*10+s[i]-'0',i++;
                   len[c++]=ll;
                   //cout<<ll<<endl;
                   while(s[i-1]!=' '&&i<l) i++;
               }
            }
            else if(s[3]=='s')
            {
               name=s[5]; i++;
               while(s[i]!=' ') name+=s[i++];
               na=s[i+1]; i+=2;
               while(i<l) na+=s[i++];
               is[si[name]]=na;
            }
            else
            {
               name=s[i++];
               while(i<l) name+=s[i++];
               int q=si[name];
               if(is[q].size()<len[q]) cout<<is[q]<<endl;
               else
               {
                   while(is[q].size()>=len[q]&&q<c)
                   {
                       go(i,0,len[q]-1) cout<<is[q][i];
                       q++;
                   }
                   if(is[q].size()<len[q]) cout<<is[q];
                   puts("");
               }
            }
        }
    }
}