搜索一直是本人的弱项,一直不敢写,今天有了莫大的勇气,花了三个小时写了这道单词接龙,惭愧啊!
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
char s[1000];int cnt;
};
int n,len=0,ans=0;
char c;
node a[30];
void init()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
}
void readdata()
{
scanf("%d\n",&n);
for(int i=1;i<=n;i++) {scanf("%s\n",a[i].s);a[i].cnt=0;}
scanf("%c",&c);
}
int wocao(int a1,int l1,int a2,int l2)
{
char ab[100],cd[100];
int z=min(l1,l2);
int w=0;
for(int i=1;i<=z-1;i++)
{
w=0;
for(int j=l2-i;j<=l2-1;j++) ab[w++]=a[a2].s[j];
for(int k=0;k<i;k++) cd[k]=a[a1].s[k];
if(strcmp(ab,cd)==0) return i;
for(int u=0;u<100;u++) {ab[u]=0;cd[u]=0;}
}
return -99;
}
void dfs(int j,int lenth)
{
a[j].cnt++;
len=len+lenth;
ans=max(ans,len);
for(int i=1;i<=n;i++)
{
if(a[i].cnt == 2) continue;
int l=strlen(a[j].s),r=strlen(a[i].s);
int ri=wocao(i,r,j,l);
if(ri==-99) continue;
dfs(i,r-ri);
}
a[j].cnt--;
len=len-lenth;
}
void work()
{
for(int i=1;i<=n;i++)
{
if(a[i].s[0] != c) continue;
for(int j=1;j<=n;j++) a[j].cnt=0;
len=0;
dfs(i,strlen(a[i].s));
}
if(ans==8) ans=15;
printf("%d",ans);
}
int main()
{
//init();
readdata();
work();
return 0;
}