如题,这个测试结果3对2错1超时,不知道怎末改了。
#include <iostream>
#include <cmath>
using namespace std;
int loongSize = 0;
void dfs(int deepth,string nowLoong,int *v,string *s,int n,char head){
int num = 0;
// for(int i=0;i<n;i++)
// cout<<v[i]<<" ";
// cout<<endl;
for(int i=0;i<n;i++){
if(v[i]!=2)
break;
num++;
}
if(num==n){
loongSize = max(loongSize,static_cast<int>(nowLoong.length()));
//cout<<loongSize<<endl;
}
if(deepth==0){
for(int i=0;i<n;i++)
if(s[i][0]==head){
v[i]++;
nowLoong = s[i];
//cout<<nowLoong<<endl;
dfs(deepth+1,nowLoong,v,s,n,head);
v[i]--;
}
}
else for(int i=0;i<n;i++){
if(v[i]==0||v[i]==1){
v[i]++;
int overSize = 0;
for(int j=1;j<min(nowLoong.length(),s[i].length());++j)
if(nowLoong.substr(nowLoong.length()-j)==s[i].substr(0,j))
overSize = j;
string o_nowLoong = nowLoong;
if(overSize>0)
nowLoong = nowLoong+s[i].substr(overSize);
//cout<<nowLoong<<" "<<s[i]<<" "<<v[i]<<endl;
dfs(deepth+1,nowLoong,v,s,n,head);
nowLoong = o_nowLoong;
v[i]--;
}
}
}
int main(){
int n,deepth=0;
cin>>n;
string *s = new string[n];
char head;
int *v = new int[n];
for(int i=0;i<n;i++){
cin>>s[i];
v[i] = 0;
}
cin>>head;
dfs(deepth,s[0],v,s,n,head);
cout<<loongSize;
return 0;
}