大佬求助 #4过不去
查看原帖
大佬求助 #4过不去
648843
wdl_楼主2022/3/12 20:47

rt

#include<bits/stdc++.h>
using namespace std;
int bz[25],n,len=0,gx[25][25];
char ch,a[25][100];
int nb(char s1[],char s2[])
{
    bool flag;
    for(int i=strlen(s1)-1;i>=0;i--)
    {
        flag=1;
        int zj=i;
        for(int j=0;j<strlen(s1)-i;j++)
        {
            if(s2[j]!=s1[zj++])
            {
                flag=0;
                break;
            }
        }
        if(flag)return strlen(s1)-i;
    }
    return 0;
}
void dfs(int s,int lenght)
{
    for(int i=0;i<n;i++)
    {
        if(bz[i]<2)
        {
            if(gx[s][i]!=0&&gx[s][i]!=strlen(a[i])&&gx[s][i]!=strlen(a[s]))
            {
                bz[i]++;
                int ls=(lenght+strlen(a[i])-gx[s][i]);
                len=max(len,ls);
                dfs(i,ls);
                bz[i]--;
            }
        }
    }
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    cin>>ch;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            gx[i][j]=nb(a[i],a[j]);
        }
    for(int i=0;i<n;i++)
        if(a[i][0]==ch)
        {
            bz[i]++;
            dfs(i,strlen(a[i]));
            bz[i]--;
        }
    cout<<len;
}
2022/3/12 20:47
加载中...