sdut 3567 模拟

来源:互联网 发布:java布尔类型默认值 编辑:程序博客网 时间:2024/06/05 04:34
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<map>using namespace std;struct node{    int l,r;    string ss;}str[20005];char tp[20005],s[20005],c;int cnt,pos,t;void init(){    c=cnt=pos=0;    memset(s,0,sizeof(s));}void name(char *tp){    int num=0,i=0;    string temp="";    for(i=0;tp[i]!='[';i++)        temp+=tp[i];    for(++i;tp[i]!=']';i++)        num=num*10+tp[i]-'0';    str[cnt].l=pos;    str[cnt].r=pos+num;    pos+=num;    str[cnt++].ss=temp;}void gets(){    int i,j;    scanf("%s",tp);    getchar();    for(i=0;i<cnt;i++)        if(tp==str[i].ss)        {            gets(tp);            int st=str[i].l,ed=str[i].r;            for(j=0;tp[j];j++)            {                if(st+j>=ed)                    break;                s[st+j]=tp[j];            }            if(st+j<ed)                s[st+j]=0;            return;        }}void puts(){    int i,j;    scanf("%s",tp);    for(i=0;i<cnt;i++)        if(tp==str[i].ss)        {            printf("%s\n",s+str[i].l);            return;        }}int main(){    scanf("%d",&t);    while(t--)    {        init();        scanf("%s",tp);        while(c!='\n'&&scanf("%s%c",tp,&c)!=EOF)            name(tp);        while(scanf("%s",tp)!=EOF)            if(tp[0]=='g')                gets();            else if(tp[0]=='c')                puts();            else if(tp[0]=='r')            {                scanf("%s",tp);                break;            }    }    return 0;}

0 0