已经想不出标题了QWQ,帮忙看看代码吧
  • 板块P1127 词链
  • 楼主初嫁QAQ
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/5/20 17:11
  • 上次更新2023/11/7 02:07:16
查看原帖
已经想不出标题了QWQ,帮忙看看代码吧
102028
初嫁QAQ楼主2020/5/20 17:11

求求各位耐心看看这非常长的代码QAQ 1个WA 5个RE。。。。

# include <iostream>
# include <cstdio>
# include <algorithm>
# include <cstring>
# define N 202000
using namespace std;
int n,cnt=1,tot,top,num;
string s,w[N];
int h[31],nxt[N],to[N],H[N];
int sta[N];
string ans[N];
bool vis[N];
struct node{
	int a,b;
	string c;
}E[2*N];
bool cmp(node a,node b){
	if(a.a==b.a&&a.b!=b.b)
		return a.b>b.b;
	if(a.a!=b.a&&a.b==b.b)
		return a.a>b.a;
	if(a.a==b.a&&a.b==b.b)
		return a.c>b.c;
}
void add(int x,int y,string s){
	nxt[++cnt]=h[x];
	to[cnt]=y;
	w[cnt]=s;
	h[x]=cnt;
}
void erlar(int q){
	sta[++top]=q;
	while(top){
		int x=sta[top];
		int i=H[x];
		//cout<<q<<" "<<x<<endl;
		while(i&&vis[i]) 
			i=nxt[i];
		if(i){
			sta[++top]=to[i];
			vis[i]=1;
			H[x]=nxt[i];
			ans[++tot]=w[i];	
			//cout<<q<<" "<<tot<<" "<<w[i]<<endl;
		}
		else
			top--;		
	}
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		cin>>s;
		E[++num].a=s[0]-'a'+1;
		E[num].b=s[s.length()-1]-'a'+1;	
		E[num].c=s;	
	}
	sort(E+1,E+num+1,cmp);
	for(int i=1;i<=num;i++){
		int a=E[i].a;
		int b=E[i].b;
		string c=E[i].c;
		add(a,b,c);
		//cout<<a<<" "<<b<<" "<<c<<endl;
	}
	for(int i=1;i<=26;i++)
		if(h[i]){
			for(int i=1;i<=26;i++)
				H[i]=h[i];
			tot=0;top=0;
			memset(vis,0,sizeof(vis));
			erlar(i);
			if(tot==n){
				for(int i=1;i<=tot;i++){
					if(i==1)
						cout<<ans[i];
					else
						cout<<'.'<<ans[i];
				}
				return 0;
			}
		}
	printf("***");
	return 0;
}
2020/5/20 17:11
加载中...