66分求调
查看原帖
66分求调
764565
shifeiTy楼主2024/1/29 14:35
#include<bits/stdc++.h>
#include<string>

using namespace std;

struct node{
	int len;
	string a;
};

int n;
bool vis[45];
node a[45];

int boo(string a,string b){
	
	int i1=a.size()-1,i2=0;
	char x=a[i1];
	
	for(i2;i2<min(a.size(),b.size());i2++){
		if(x==b[i2]){
			int t1=i1,t2=i2;
			while(t2>0){
				t1--,t2--;
				if(a[t1]!=b[t2]){
					break;
				}
			}
			if(!t2){
				return i2+1;
			}
		}
	}
	
	return 0;
}

int dfs(int x){
	vis[x]=1;
	int ans=a[x].len;
	
	for(int i=0;i<2*n;i++){
		if(vis[i])	continue;
		int fl=boo(a[x].a,a[i].a);
		if(fl==0 or fl==a[x].len or fl==a[i].len)	continue;
		ans=max(ans,a[x].len-fl+dfs(i));
	}
	
	vis[x]=0;
	return ans;
}

int main(){

	cin>>n;
	for(int i=0;i<n;i++){
		string t;
		cin>>t;
		a[i].len=t.size(),
		a[i].a=t;
		a[i+n].len=t.size(),
		a[i+n].a=t;
	}
	
	char f;
	int maxx=0;
	cin>>f;
	for(int i=0;i<n;i++){
		if(f==a[i].a[0]){
			maxx=max(maxx,dfs(i));
		}
	}
	
	printf("%d",maxx);

	return 0;
}
/*

*/

四,五点wa了

2024/1/29 14:35
加载中...