蒟蒻#3#5 Too short求助
  • 板块P1127 词链
  • 楼主Mine_KingCattleya
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/11/27 20:28
  • 上次更新2023/11/5 07:14:06
查看原帖
蒟蒻#3#5 Too short求助
195331
Mine_KingCattleya楼主2020/11/27 20:28

RT,我也不知道为什么会出现这种情况QAQ,求大佬帮忙调调,思路就是找开头字母然后直接dfs。

#include<cstdio>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
bool f[1005];
string s[1005];
int b_st[26],b_ed[26],st,ed,ans[1005];
void dfs(int now,int num)
{
	f[num]=true;
	ans[now]=num;
	if(now==n)
	{
		cout<<s[ans[1]];
		for(int i=2;i<=n;i++) cout<<'.'<<s[ans[i]];
		exit(0);
	}
	int ee=s[num][s[num].length()-1];
	for(int i=1;i<=n;i++)
		if((!f[i])&&s[i][0]==ee) dfs(now+1,i);
	f[num]=false;
	ans[now]=0;
	return ;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		cin>>s[i];
		b_st[s[i][0]-'a']++;
		b_ed[s[i][s[i].length()-1]-'a']++;
	}
	sort(s+1,s+n+1);
	for(int i=0;i<26;i++)
		if(b_st[i]-b_ed[i]==1) st=i;
		else if(b_ed[i]-b_st[i]==1) ed=i;
	for(int i=1;i<=n;i++)
		if(s[i][0]-'a'==st&&(s[i][s[i].length()-1]!=ed||b_ed[ed]!=1))
		{
			dfs(1,i);
			puts("***");
			return 0;
		}
	return 0;
}

万分感谢QAQ

2020/11/27 20:28
加载中...