求hack
查看原帖
求hack
181521
珈乐唯毒楼主2022/4/17 20:58

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
2022/4/17 20:58
加载中...