27pts,求助!
查看原帖
27pts,求助!
907430
corner_xiejunqi楼主2024/11/25 22:14

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e3+10;
int n;
struct node{
	string str;
	char top,tail;
	int len;
}edge[N];
vector<int> g[N];
int step[N],ans[N],vis[N],maxs=0;
bool cmp(node a,node b){return a.str<b.str;}
bool f=false;
void dfs(int t,int s,char tail){
	bool flag=0;
	for(int i=0;i<g[tail-'a'].size();i++){
		int top_num=g[tail-'a'][i];
		if(!vis[top_num]){
			f=true;
			vis[top_num]=1;
			flag=1;
			step[s]=top_num;
			dfs(top_num,s+1,edge[top_num].tail);
		}
	}
	if(!flag){
		if(s>maxs){
			for(int i=1;i<=s;i++) ans[i]=step[i];
			maxs=s;
		}
		return;
	}
}
signed main(){
	// step 1、读题、声明变量
	cin.tie(0);cout.tie(0);
	ios::sync_with_stdio(false);
	// step 2、输入
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>edge[i].str;
		edge[i].len=edge[i].str.size();
		edge[i].tail=edge[i].str[edge[i].len-1];
		edge[i].top=edge[i].str[0];
		g[edge[i].top-'a'].push_back(i);
	}
	sort(edge+1,edge+1+n,cmp);
	// step 3、处理
	for(int i=1;i<=n;i++){
		memset(step,0,sizeof step);
		memset(vis,0,sizeof vis);
		vis[i]=1;
		step[1]=i;
		dfs(i,2,edge[i].tail);
		step[1]=0;
		vis[1]=0;
	}
	if(!f){
		cout<<"***";
		return 0;
	}
	// step 4、输出
	for(int i=1;i<=maxs-2;i++) cout<<edge[ans[i]].str<<'.';
	cout<<edge[ans[maxs-1]].str;
	return 0;
}
2024/11/25 22:14
加载中...