36Wa了,但是找不到hackQAQ
#include<bits/stdc++.h>
using namespace std;
string LIne;
char s[1005][1005];
int n,sl[1005],ln;
int son[100005][130],cg[10005],tot,tt;
char to[1005][1005];
bool vis[10005];
int tl[1005];
void solve1(){
int nw=0,len=sl[2];
for(int i=1;i<=len;i++){
int x=s[2][i];
if(!son[nw][x])son[nw][x]=++tot;
nw=son[nw][x];
}
cg[nw]=++tt;
len=sl[3];
for(int i=1;i<=len;i++)to[tt][i]=s[3][i];
tl[tt]=sl[3];
}
void solve2(){
int nw=0,len=sl[2];
for(int i=1;i<=len;i++){
int x=s[2][i];
nw=son[nw][x];
}
cg[nw]=0;
}
void solve3(char s3[],int sl3){
int nw=0,lt=1;
bool flag=0;
for(int i=1;i<=sl3;i++){
if((s3[i]>'9'||s3[i]<'0')&&(s3[i]<'a'||s3[i]>'z')&&(s3[i]<'A'||s3[i]>'Z')&&s3[i]!='_'){
if(!flag&&cg[nw]&&!vis[nw]){
vis[nw]=1;
int sl4=tl[cg[nw]];
char s4[sl4+1];
for(int j=1;j<=sl4;j++)s4[j]=to[cg[nw]][j];
solve3(s4,sl4);
vis[nw]=0;
printf("%c",s3[i]);
}
else for(int j=lt;j<=i;j++)printf("%c",s3[j]);
lt=i+1;
flag=0;
nw=0;
}
else{
nw=son[nw][(int)s3[i]];
if(!nw)flag=1;
}
}
if(!flag&&cg[nw]&&!vis[nw]){
vis[nw]=1;
int sl4=tl[cg[nw]];
char s4[sl4+1];
for(int j=1;j<=sl4;j++)s4[j]=to[cg[nw]][j];
solve3(s4,sl4);
vis[nw]=0;
}
else for(int j=lt;j<=sl3;j++)printf("%c",s3[j]);
}
int main(){
// freopen("preprocessor.in","r",stdin);
// freopen("preprocessor.out","w",stdout);
scanf("%d",&n);
getline(cin,LIne);
for(int T=1;T<=n;T++){
getline(cin,LIne);
// cout<<LIne<<endl;
int m=LIne.size();
ln=0;
if(m&&LIne[0]=='#'){
int lt=0;
for(int i=lt;i<m;i++){
if(LIne[i]==' '){
sl[ln=1]=0;
for(int j=lt;j<i;j++)s[ln][++sl[ln]]=LIne[j];
lt=i+1;
break;
}
}
for(int i=lt;i<m;i++){
if(LIne[i]==' '){
sl[ln=2]=0;
for(int j=lt;j<i;j++)s[ln][++sl[ln]]=LIne[j];
lt=i+1;
break;
}
}
if(lt<m){
sl[++ln]=0;
for(int j=lt;j<m;j++)s[ln][++sl[ln]]=LIne[j];
}
}
else{
sl[ln=1]=0;
for(int i=0;i<m;i++)s[ln][++sl[ln]]=LIne[i];
}
if(m&&LIne[0]=='#'&&LIne[1]=='d')solve1();
if(m&&LIne[0]=='#'&&LIne[1]=='u')solve2();
if(!m||LIne[0]!='#')solve3(s[1],sl[1]);
printf("\n");
}
return 0;
}
//guanzhujiaran dundunjiechan -- by tuiyier