85分,TLE求助
查看原帖
85分,TLE求助
354425
wangping楼主2022/2/17 14:16

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;
}
2022/2/17 14:16
加载中...