调了一个半小时,心态小崩
#include <bits/stdc++.h>
using namespace std;
string jielong[30];
bool if_start[30];
char start;
int n,maxlength=-1,use[30];
string pluss(string a,string b){
int lena=a.length(),lenb=b.length(),flag;
for(int k=1;k<=min(lena,lenb);k++){
flag=1;
for(int i=0;i<k;i++){
if(a[lena-k+i]!=b[i]){
flag=0;
break;
}
}
if(flag){
for(int i=k;i<lenb;i++) a+=b[i];
return a;
}
}
return "no";
}
void dfs(string s,int pos){
if(pos==n+1) return;
maxlength=max(maxlength,int(s.length()));
if(pos==1){
for(int i=1;i<=n;i++){
if(if_start[i]){
s=jielong[i];
if_start[i]=0;
use[i]--;
}
}
}
for(int i=1;i<=n;i++){
string temp=pluss(s,jielong[i]);
if(use[i] && temp!="no" && s!=jielong[i]){
use[i]--;
dfs(temp,pos+1);
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>jielong[i];
cin>>start;
for(int i=1;i<=n;i++){
if(jielong[i][0]==start){
if_start[i]=1;
}else{
if_start[i]=0;
}
}
for(int i=0;i<30;i++) use[i]=2;
dfs("",1);
cout<<maxlength;
return 0;
}