60分求助qwq
查看原帖
60分求助qwq
417018
dark_moon楼主2022/5/8 15:52
#include<bits/stdc++.h> 
#define ll long long
using namespace std;
ll n, m, son[1000][30], idx, e[1000];
char s[25], t[2000005];
void insert(){
	int l = strlen(s + 1), p = 0;
	for(int i = 1; i <= l; i ++){
		if(son[p][s[i] - 'a'] == 0)
		son[p][s[i] - 'a'] = ++idx;
		p = son[p][s[i] - 'a'];
	}
	e[p] = 1;
}
int answer(){
	int l = strlen(t + 1), p = 0, ans = 0;
	for(int i = 1; i <= l; i ++){
		if(son[p][t[i] - 'a'])
		p = son[p][t[i] - 'a'];
		else if(e[p]){
			ans = i - 1, p = 0;
			if(son[p][t[i] - 'a'])
			p = son[p][t[i] - 'a'];
			else
			return ans;
		}
		else
		return ans;
	}
	if(e[p])
	ans = l;
	return ans;
}
int main(){
	scanf("%lld%lld", &n, &m);
	for(int i = 1; i <= n; i ++){
		scanf("%s", s + 1);
		insert();
	}
	for(int i = 1; i <= m; i ++){
		scanf("%s", t + 1);
		printf("%d\n", answer());
	}
	return 0;
}
2022/5/8 15:52
加载中...