求求各位耐心看看这非常长的代码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;
}