求助。半天调不出来
查看原帖
求助。半天调不出来
553199
biguo楼主2023/3/22 12:49
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,ans=INT_MIN;
int lz;
string str[30];
int c[30];
int visit[30];
int t[30][30];
void work(int l,int r){
	string a=str[l],b=str[r];
	for(int i=c[l]-1;i>=0;i--){
		bool flag=true;
		int ky=0;
		for(int j=i;j<c[l];j++){
			if(a[j]!=b[ky++]){
				flag=false;
				break;
			}
		}
		if(flag){
			t[l][r]=c[l]-i;	
			return ;
		} 
	}
	return ;
}
void dfs(int r){
	bool flag=false;
	for(int i=1;i<=n;i++){
		if(visit[i]>=2||t[r][i]==0||t[r][i]==c[r]||t[r][i]==c[i]) continue;
		visit[i]++;
		lz+=c[i]-t[r][i];
		flag=true;
		dfs(i);
		visit[i]--;
		lz-=c[i]-t[r][i];
	}
	if(!flag) ans=max(ans,lz);
	return ;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		cin>>str[i];
		c[i]=str[i].size();
	} 
	char x;
	cin>>x;
	for(int i=1;i<n;i++){
		for(int j=i+1;j<=n;j++){
			work(i,j);
		}
	}
	for(int i=1;i<=n;i++){
		if(str[i][0]!=x) continue;
		lz=c[i];
		visit[i]++;
		dfs(i);
		visit[i]=0;
	}
	printf("%d",ans);
	return 0;
}
2023/3/22 12:49
加载中...