【悬赏3关注】没过样例,求助!!!
查看原帖
【悬赏3关注】没过样例,求助!!!
638141
Literally楼主2023/5/13 20:53

调了一个半小时,心态小崩

#include <bits/stdc++.h>
using namespace std;
string jielong[30];
bool if_start[30];
char start;
int n,maxlength=-1,use[30];
string pluss(string a,string b){
	int lena=a.length(),lenb=b.length(),flag;
	for(int k=1;k<=min(lena,lenb);k++){
		flag=1;
		for(int i=0;i<k;i++){
			if(a[lena-k+i]!=b[i]){
				flag=0;
				break;
			}
		}
		if(flag){
    		for(int i=k;i<lenb;i++) a+=b[i];
    		return a;
		}
	}
	return "no";
}
void dfs(string s,int pos){
	if(pos==n+1) return;
	maxlength=max(maxlength,int(s.length()));
	if(pos==1){
		for(int i=1;i<=n;i++){
			if(if_start[i]){
				s=jielong[i];
				if_start[i]=0;
				use[i]--;
			}
		}
	}
	for(int i=1;i<=n;i++){
		string temp=pluss(s,jielong[i]);
		if(use[i] && temp!="no" && s!=jielong[i]){
			use[i]--;
			dfs(temp,pos+1);
		}
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>jielong[i];
	cin>>start;
	for(int i=1;i<=n;i++){
		if(jielong[i][0]==start){
			if_start[i]=1;
		}else{
			if_start[i]=0;
		}
	}
	for(int i=0;i<30;i++) use[i]=2;
	dfs("",1);
	cout<<maxlength; 
	return 0;
}
2023/5/13 20:53
加载中...