85分,最后三个数据TLE了,求助。
/*
Date: 2022.02.17
Problem: ACC 2085
Day: 2
*/
#include <bits/stdc++.h>
#define re register int
using namespace std;
const int N = 2000001, M = 1001;
int main()
{
char s[11], t[N];
int bb[M], f[N];
int ss[27][M], n, m, tot = 1;
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (re i(1); i <= n; ++i)
{
scanf("%s", s + 1);
int tmp = 1, len = strlen(s + 1);
for (re j(len); j >= 1; --j)
{
if (!ss[s[j] - 'a'][tmp])
ss[s[j] - 'a'][tmp] = ++tot;
tmp = ss[s[j] - 'a'][tmp];
}
bb[tmp] = 1;
}
for (re i(1); i <= m; ++i)
{
memset(f, 0, sizeof(f));
scanf("%s", t + 1);
int len = strlen(t + 1), ans = 0;
f[0] = 1;
for (re j(1); j <= len; ++j)
{
int tmp = 1;
for (re k(j); k >= 1; --k)
{
if (!ss[t[k] - 'a'][tmp])
break;
tmp = ss[t[k] - 'a'][tmp];
if (bb[tmp])
f[j] |= f[k - 1];
}
if (f[j])
ans = j;
}
printf("%d\n", ans);
}
return 0;
}