【題目】
【題意】
搞了一個小時發現題意理解錯了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("");
}
}
}
}
}