提交时间:2024-03-21 23:47:37
运行 ID: 139169
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int ans,n; string a[21]; int eachTime[21]; char begin; bool ok(string s1,string s2) { for(int i=1;i<min(s1.length(),s2.length());i++) { if(s1.substr(s1.length()-i,i)==s2.substr(0,i)) { return true; } } return false; } string merge(string s1,string s2) { for(int i=1;i<s1.length();i++) { if(s1.substr(s1.length()-i,i)==s2.substr(0,i)) { return s1.substr(0,s1.length()-i).append(s2); } } } void search(string s,int foot) { for(int i=1;i<=n;i++) { if(eachTime[i]<2&&ok(s,a[i])) { eachTime[i]++; string down=merge(s,a[i]); search(down,down.length()); eachTime[i]--; } } ans=max(ans,foot); return; } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } cin>>begin; for(int i=1;i<=n;i++) { if(a[i][0]==begin) { eachTime[i]++; search(a[i],a[i].length()); eachTime[i]--; } } cout<<ans; return 0; }