样例没过,34分WA,求调!
查看原帖
样例没过,34分WA,求调!
644112
Sinktank楼主2023/11/9 18:03
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
int n,maxx,sum,siz[30];
string a[30];
char start;
int vis[30],mem[30][30];
int chong(int posa,int posb){
	string ta=a[posa],tb=a[posb];
	int lena=siz[posa],lenb=siz[posb],minlen=min(lena,lenb);
	for(int i=1;i<=minlen;i++){
		bool f=1;
		for(int j=1;j<=i;j++){
			if(ta[lena-j]!=tb[i-j]){
				f=0;
				break;
			}
		}
		if(f) return i==minlen?-1:i;
	}
	return 0;
}
void dfs(int pos){
	bool f=0;
	vis[pos]++;
	sum+=siz[pos];
	for(int i=0;i<n;i++){
		if(vis[i]>=2||mem[pos][i]<=0) continue;
		f=1;
		sum-=mem[pos][i];
		sum+=siz[pos]-mem[pos][i];
		dfs(i);
		sum+=mem[pos][i];
	}
	sum-=siz[pos];
	vis[pos]--;
	if(!f){
		maxx=max(maxx,sum);
	}
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
		siz[i]=a[i].size();
	}
	cin>>start;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			mem[i][j]=chong(i,j);
		}
	}
	for(int i=0;i<n;i++){
		if(a[i][0]==start){
			sum=siz[i];
			vis[i]++;
			dfs(i);
			vis[i]--;
		}
	}
	cout<<maxx;
	return 0;
}

调了好长时间,心态炸裂了,绝对是一些低级错误,但是我找不出来(哭)

谢谢大家了

2023/11/9 18:03
加载中...