Trie WA 求助
查看原帖
Trie WA 求助
461359
huangrenheluogu楼主2023/11/21 21:11

Wa on #2, #3,#4

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 1, M = 63;
int T, n, q, nxt[N * M][M], cnt, fin[N * M], len, x, p;
string s;
inline void init(){
	for(int i = 0; i <= cnt; i++){
		fin[i] = 0;
		for(int j = 1; j <= 62; j++) nxt[i][j] = 0;
	}
	cnt = 0;
}
inline int work(char c){
	if('a' <= c && c <= 'z') return c - 'a' + 1;
	if('A' <= c && c <= 'Z') return c - 'A' + 27;
	return c - '0' + 53;
}
inline void upd(){
	p = 0;
	for(int i = 0; i < len; i++){
		x = work(s[i]);
		if(!nxt[p][x]) nxt[p][x] = ++cnt;
		p = nxt[p][x];
		fin[p]++;
	}
}
inline int query(){
	int res = 0;
	p = 0;
	for(int i = 0; i < len; i++){
		x = work(s[i]);
		if(!nxt[p][x]) return 0;
		p = nxt[p][x];
	}
	return fin[p];
}
int main(){
	scanf("%d", &T);
	while(T--){
		init();
		scanf("%d%d", &n, &q);
		for(int i = 1; i <= n; i++){
			cin >> s;
			len = s.size();
			upd();
		}
		for(int i = 1; i <= q; i++){
			cin >> s;
			len = s.size();
			printf("%d\n", query());
		}
	}
	return 0;
}
2023/11/21 21:11
加载中...