洛谷一道搜索题,不知哪里有错误


#include <bits/stdc++.h>
using namespace std;
char a[25][20];
int f[25];
char str[200];
char chx;
int n, lenn, maxn;
int find(int k)
{
    //先找首字母 再比对 最后返回长度
    for (int i = strlen(str) - 1; i >= 0; i--)
    {
        if (str[i] == a[k][0])
        {
            bool b = 1;
            for (int j = i; j <= strlen(str) - 1; j++)
                if (str[j] != a[k][j - i])
                {
                    b = 0;break;
                }
            if (b)
                return strlen(str) - i;
        }
    }
    return -1;
}
void work()
{
    
    for (int i = 0; i < n; i++)
    {
        if (f[i] < 2) //首先使用次数
        {
            //其次是否可以拼
            int len=find(i);
            if (len>0)
            {
                int lenstr = strlen(str);
                
                f[i]++;
                strcat(str, &a[i][len - 1]);
                work();
                
                f[i]--;
                strcpy(str +lenstr , "");
            }
        }
    }
    lenn = strlen(str);
    maxn = max(maxn, lenn);

}
int main()
{
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    cin >> chx;
    for (int i = 0; i < n; i++)
    {
        if (a[i][0] == chx)
        {
            f[i]++;
            strcpy(str, a[i]);
            work();
            strcpy(str, "");
            f[i]--;
        }
    }
    cout << maxn;
    return 0;
}

img

https://www.luogu.com.cn/problem/P1019

int len=find(i);?