提交时间:2023-12-01 13:37:24

运行 ID: 113139

#include<bits/stdc++.h> using namespace std; int n,maps; string str[20]; int b[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(){ //freopen("chain.in","r",stdin); //freopen("chain.out","w",stdout); 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; }