大佬帮忙,只有50分
查看原帖
大佬帮忙,只有50分
932398
Franky100楼主2023/10/2 17:59
#include <bits/stdc++.h>
using namespace std;
int n,vis[100001],ans,maxn,l[100001],p;
string s[10001];
char ch;
int find(int x,int y){
    int lx=l[x],ly=l[y];
    for(int i=lx-1;i>=1;i--){
        if(s[x][i]==s[y][0]){
            int k=0;
            for(int j=i+1;j<=lx-1;j++,k++){
                if(s[x][j] != s[y][k]) return 0;
            }
            return ly - (k + 1);
        }
    }
    return 0;
}
void dfs(int x){
    for(int i = 1; i <= n; i++){
        if(vis[i]<2&&find(x,i)){
            vis[i]++,ans+=find(x, i);
            dfs(i);
            vis[i]--,ans-=find(x, i);
        }
    }
    if(ans>p) p=ans;
}
signed main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>s[i];
        l[i]=s[i].length();
    }
    cin>>ch;
    for(int i=1;i<=n;i++){
        if(s[i][0]==ch){
            ans=l[i],vis[i]++;
            dfs(i);
            vis[i]--;
            if(p>maxn) maxn=p;
        }
    }
    cout<<maxn<<endl;
    return 0;
}
2023/10/2 17:59
加载中...