RT
下载了样例来测试,本地和在线IDE结果均正确

#include<bits/stdc++.h>
#define E 1e-6
typedef long long ll;
using namespace std;
string s[25],c;
int vis[25];
int n,ans = 0;
int check(string a,string b){
int t = a.size() - 1,t1 = 0,cnt = 0;
while(t >= 0 && a[t] != b[0]) t--;
while(t < a.size() && t1 < b.size() && a[t] == b[t1]){
t++,t1++;
cnt++;
}
if(t == a.size()) return cnt;
else return 0;
}
void dfs(string a,int len){
ans = max(ans,len);
for(int i=0;i<n;i++){
int chk = check(a,s[i]);
if(vis[i] < 2 && chk){
// cout<<a<<' '<<s[i]<<" 拼接后长度:"<<a.size() + s[i].size() - chk<<endl;
vis[i]++;
dfs(s[i],len + s[i].size() - chk);
vis[i]--;
}
}
}
int main(){
// freopen("C:\\Users\\Administrator\\Desktop\\1.in","r",stdin);
// freopen("C:\\Users\\Administrator\\Desktop\\1.out","w",stdout);
memset(vis,0,sizeof(vis));
cin>>n;
cin.ignore();
for(int i=0;i<=n;i++) getline(cin,s[i]);
vis[n] = 2;
dfs(s[n],0);
cout<<ans + 1;
// fclose(stdin);
// fclose(stdout);
return 0;
}