这算hack数据吗? hack:2 atb atbttat a 俩单词总长才10,结果输出"龙"长13,这怎么可能?若有可能,这个字符串是长啥样的?
##以下代码与题解代码输入上述hack数据都为13##
#include<bits/stdc++.h>
using namespace std;
string s[25];char ch;
int n,a[25][25];
int ans,an,st[30];
int find(int x,int y)
{
int pp=1,z=0;
for(int i=s[x].size()-1;i+1;--i)
{
for(int j=i;j<(int)s[x].size();++j)
{
// cout<<s[x][j]<<" "<<s[y][z]<<endl;
if(s[x][j]!=s[y][z++])
{
pp=0;break;
}
}
if(pp) return s[x].size()-i;
z=0;pp=1;
}
return 0;
}
void dfs(int p)
{
int x=0;
for(int i=1;i<=n;++i)
{
if(st[i]>1) continue;
if(!a[p][i]) continue;
if(a[p][i]==(int)s[p].size()||a[p][i]==(int)s[i].size()) continue;
an+=s[i].size()-a[p][i];
st[i]++;
x=1;
dfs(i);
an-=s[i].size()-a[p][i];
st[i]--;
}
if(!x) ans=max(ans,an);
}
int main()
{
cin>>n;
for(int i=1;i<=n;++i) cin>>s[i];
cin>>ch;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j) a[i][j]=find(i,j);
}
for(int i=1;i<=n;++i)
{
if(s[i][0]==ch)
{
st[i]=1;
an=s[i].size();
dfs(i);
st[i]=0;
}
}
cout<<ans<<endl;
return 0;
}