玄关求助,仅过#1#6
查看原帖
玄关求助,仅过#1#6
1255916
Iteration72楼主2025/6/28 20:40
#include<cstring>
#include<iostream>
#include<algorithm>//用的VSCode
using namespace std;
typedef int ll;
const ll N=7001000;
string str;
ll T,n,m,g,s[N][130],t[N];//s[][]是Trie树,t[]是出现次数,g为节点数
void sClear(ll idx){//清空
	for(int i=0;i<=idx;i++)
		for(int j=0;j<=122;j++)
			s[i][j]=0;
	for(int i=0;i<=idx;i++) t[i]=0;
	idx=0;
}void ins(string str){//插入
	int pre=0,now=0;
	for(;now<str.size();now++){
		int nch=str[now];
		if(!s[pre][nch]) s[pre][nch]=++g;
		pre=s[pre][nch];t[pre]++;
	}return;
}int qry(string str){ //访问
	int pre=0,now=0;
	for(;now<str.size();now++){
		int nch=str[now];
		if(!s[pre][nch]) return 0;
		pre=s[pre][nch];
	}return t[pre];
}int main(){
	cin>>T;
	while(T--){
		cin>>n>>m;
		sClear(g);
		for(int i=1;i<=n;i++){ cin>>str;ins(str); }
		for(int i=1;i<=m;i++){
			cin>>str;
			ll tmp=qry(str);
			cout<<tmp<<endl;
		}
	}return 0;
}
2025/6/28 20:40
加载中...