思路很简单 但样例得到13 反复调试无法解决 求助
查看原帖
思路很简单 但样例得到13 反复调试无法解决 求助
1375162
MasterBait楼主2024/11/5 22:37
#include<bits/stdc++.h>
using namespace std;
int n;
string a[21];
char start;
int ans=0;
int num[21];
string a0;
string exp(string x,string y){//判断并连接两个字符串 
    if(x.find(y)!=string::npos) return "-0";
    for(int i=1;i<=x.length();i++){
        if(y.substr(0,i)==x.substr(x.length()-i)){
            return x+y.substr(i);
        }
    }
    return "-0";
}
void dfs(string crt){
	bool ck=0;
	for(int i=0;i<n;i++){
		if(num[i]>0){
			string str=exp(crt,a[i]);
			if(str!="-0"){
				num[i]--;
				ck=1;
				dfs(str);
				num[i]++;
			}
		}
	}
	if(!ck){
		int la=crt.length(),lb=a0.length();
		if(la>lb) a0=crt;
	}
}
void fill(){
	for(int i=0;i<n;i++) num[i]=2;
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
    	cin>>a[i];
	}
	cin>>start;
	for(int i=0;i<n;i++){
		if(a[i][0]==start){
			fill();
			num[i]--;
			dfs(a[i]);
			num[i]++;
			int len=a0.length();
			ans=max(ans,len);
		}
	}
	cout<<ans;
    return 0;
}
2024/11/5 22:37
加载中...