求助dalao,为什么死循环了
查看原帖
求助dalao,为什么死循环了
873786
wangjiajinself楼主2024/7/10 10:12
#include<iostream>
#include <string>
using namespace std;
int n;
bool vis[101];
string a[101];
char beg;
long long ret(string a,string b){
	long long size=min(a.size(),b.size());
	for(long long i=1;i<=size;i++){//
		if(a.substr(a.size()-i,a.size()-1)==b.substr(0,i)){
			if(i==size) return -1;
			return i;
		}
		
	}
	return 0;
}
long long dfs(int j){
	long long iMax=-1;
	bool flag=false;
	for(int i=1;i<=n;i++)
	if(ret(a[j],a[i])!=-1&&vis[i]<2) {
		vis[i]++;
		iMax=max(iMax,(long long)a[i].size()-ret(a[j],a[i])+dfs(i)),flag=true;
	    vis[i]-=1;
	}
	if(flag==false) return 0;
	return iMax;
}
long long solve(){
	long long iMax=-1;
	for(int i=1;i<=n;i++){
		if(a[i][0]==beg) iMax=max(iMax,dfs(i)+(long long)a[i].size());
	}
	return iMax;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	cin>>beg;
	cout<<solve();
	return 0;
}
2024/7/10 10:12
加载中...