#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
#include<vector>
#include<queue>
#include<set>
#include<stack>
#include<iomanip>
#define mxan
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
#define mod 1000000009
#define INF 0x3f3f3f3f
#define pi acos(-1.0)
#define eps 1e-6
using namespace std;
typedef long long ll;
const int N=1e6+5;
const ll IN=1e18;
const int maxn=1020;
int d[maxn],v[maxn];
int vis[100];
int road[maxn];
int n,length,length_c;
string str[100];
int judge(string a,string b)
{
int ans;
for(int i=1;i<min(a.length(),b.length());i++)
//重合长度,判断到最小长度减一,避免完全重合
{
int flag=1;
for(int j=0;j<i;j++)
if(a[a.length()-i+j]!=b[j])
{flag=0;
break;}
if(flag==1)
return i;
}
return 0;
}
void dfs(string now,int lengthnow)
{
length=max(length,lengthnow);
for(int i=0;i<n;i++)
{
if(vis[i]>=2)
continue;
length_c=judge(now,str[i]);
if(length_c>0)
{
vis[i]++;
dfs(str[i],lengthnow+str[i].length()-length_c);
vis[i]--;
}
}
}
int main()
{
string start;
cin>>n;
for(int i=0;i<n;i++) cin>>str[i];
cin>>start;
dfs(" "+start,1);//和judge有关,重点
cout<<length<<endl;
}
单词接龙
最新推荐文章于 2020-03-22 19:11:02 发布