16分求助,#1AC,#2,3,5,6WA,#4TLE
查看原帖
16分求助,#1AC,#2,3,5,6WA,#4TLE
494421
Exoplanet楼主2022/4/4 17:05

rt,下载了样例2,本应输出19,输出了36

重叠部分我试过,没有出错

请大佬们帮我看一下是哪里出错了,谢谢大佬们的关注

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
string s1[30],s2; 
long long cnt[30][30],vis[30],n,ans=0,ans1=0;
char ch;
long long cd(string a,string b)
{
	long long len,len1,len2,e=0,ans2=0;
	len=min(a.length(),b.length());
	len1=a.length()-len;
	len2=b.length()-len;
	a=a.substr(len1,len);
	b=b.substr(0,len);
	for(int i=1;i<=len;i++)
	{
		if(a.substr(a.size()-i,i)==b.substr(0,i)){
			if(i!=len) return i;
			else return 0;
		}
	}
}
void dfs(int k,int ans1)
{
	if(ans1>ans)
	{
		ans=ans1;
	}
	vis[k]++;
	for(int i=0;i<n;i++) 
	{
		if(vis[i]<2&&cnt[k][i]>0)
		{
			dfs(i,ans1+s1[i].length()-cnt[k][i]);
		}
	} 
	vis[k]--;
}
int main()
{
	scanf("%lld",&n);
	for(int i=0;i<n;i++)
	{
		cin>>s1[i];
	}
	cin>>ch;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			cnt[i][j]=cd(s1[i],s1[j]);
		}
	}
	 for(int i=0;i<n;i++){
        if(s1[i][0]==ch){
            ans1+=s1[i].length();
            dfs(i,ans1);
        } 
    } 
	printf("%lld",ans);
	return 0;
}
2022/4/4 17:05
加载中...