比赛 练习赛 评测结果 AAAAAAAAA
题目名称 单词接龙 最终得分 100
用户昵称 gsj.cpp 运行时间 0.005 s
代码语言 C++ 内存使用 13.66 MiB
提交时间 2019-05-22 14:19:01
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,max_=-1;
char start;
struct D
{
	int cnt,leng; 
	char a[105];
}d[25];
int coi(char a[],char b[]) 
{
	int l1=strlen(a),l2=strlen(b);
	bool jdg=1;
	for(int i=1;i<l1&&i<l2;i++)
	{
		jdg=1;
		for(int j=0;j<i;j++)
		if(a[l1-i+j]!=b[j])
		{
			jdg=0;
			break;
		}
		if(jdg)return i;
	}
	return 0;
}

void dfs(char w[],int num)
{
	max_=max(max_,num);
	int q;
	for(int i=0;i<n;i++)
	if(d[i].cnt>0)
	{
		q=coi(w,d[i].a);
		if(q)
		{
			d[i].cnt--;
			dfs(d[i].a,num+d[i].leng-q);
			d[i].cnt++;
		}
	}
}
int main()
{
	freopen("dcjl.in","r",stdin);
	freopen("dcjl.out","w",stdout);
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>d[i].a;
		d[i].leng=strlen(d[i].a);
		d[i].cnt=2;
	}
	cin>>start;
	for(int i=0;i<n;i++)
	{
		if(d[i].a[0]==start)
		{
			d[i].cnt--;
			dfs(d[i].a,d[i].leng);
			d[i].cnt++;
		}
	}
	cout<<max_<<'\n';
	return 0;
}