【题目】
【题意】
搞了一个小时发现题意理解错了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("");
}
}
}
}
}