提交时间:2024-08-21 08:24:25
运行 ID: 173722
#include<iostream> using namespace std; int n,used[30],res; string s[30]; char sta; bool exist(string word,string b) { // cout<<"exist:"<<word<<" "<<b<<endl; int fin; for(int i=1; i<word.size(); i++) { string str=word.substr(word.size()-i,i); fin=b.find(str); if(fin==0) return true; } return false; } string hebin(string a,string b) { // cout<<"hebin:"<<a<<" "<<b<<endl; int fin,len=0; do { len++; string str=a.substr(a.size()-len,len); // cout<<len<<" "<<str<<endl; fin=b.find(str); }while(fin!=0); string str=a.substr(0,a.size()-len); return str+b ; } void dfs(string tar,string last) { // cout<<tar<<" "<<last<<endl; bool can=false; for(int i=1; i<=n; i++) if(used[i]<2&&exist(last,s[i])) { can=true; used[i]++; dfs(hebin(tar,s[i]),s[i]); used[i]--; } if(!can) { int len=tar.size(); res=std::max(res,len); // cout<<tar<<endl; } } int main() { cin>>n; for(int i=1; i<=n; i++) cin>>s[i]; cin>>sta; for(int i=1; i<=n; i++) { if(s[i][0]==sta) { used[i]++; dfs(s[i],s[i]); used[i]--; } } cout<<res<<endl; // cout<<hebin(s[1],s[1])<<endl; return 0; }