提交时间:2024-04-10 13:48:53

运行 ID: 142867

#include<bits/stdc++.h> using namespace std; int n,maps,b[20]; string str[20]; int pd(string s1,string s2){ for(int k=s1.size()-1;k>=0;k--){ bool r=1; int xxx=0; for(int i=k;i<=s1.size()-1;i++){ if(!(xxx<=s2.size()-1)){ r=0; break; } else if(s1[i]!=s2[xxx]){ r=0; break; } xxx++; } if(r)return k; } return -1; } void dfs(int cur,string s){ bool sss=1; for(int i=0;i<n;i++) if(b[i]<=1){ sss=0; int xsx=pd(s,str[i]); if(xsx!=-1){ string sxs; for(int i=0;i<=xsx-1;i++)sxs+=s[i]; sxs+=str[i]; b[i]+=1; dfs(cur+1,sxs); b[i]-=1; } } if(sss&&maps<s.size())maps=s.size(); } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n; for(int i=0;i<=n-1;i++)cin>>str[i]; char a; cin>>a; for(int i=0;i<n;i++) if(str[i][0]==a){ b[i]=1; string xsx=str[i]; if(maps<xsx.size())maps=xsx.size(); dfs(0,xsx); b[i]=0; } cout<<maps; return 0; }