蜜汁WA 52pts 求调 悬赏1关注
查看原帖
蜜汁WA 52pts 求调 悬赏1关注
743811
Shakespeare07楼主2022/11/2 13:44

rt.

#include<bits/stdc++.h>
using namespace std;

#define il inline
#define re register
//#define int long long

il int read(){
	int s=0,w=1;char c=getchar();
	while(!isdigit(c)){ if(c=='-') w=-1;c=getchar();}
	while(isdigit(c)){ s=(s<<3)+(s<<1)+(c^48);c=getchar();}
	return s*w;
}

const int N=1e5+5;

int n,m,cnt[N*30];
char s[N],t[N];

int tot,ch[N*30][65];

il void ins(re char str[]){
	int now=0,len=strlen(str+1);
	for(re int i=1;i<=len;++i){
		int tmp;
		if(str[i]>='a' && str[i]<='z') tmp=str[i]-'a';
		else if(isdigit(str[i])) tmp=str[i]-'0'+52;
		else tmp=str[i]-'A'+26;
		if(!ch[now][tmp]) ch[now][tmp]=++tot;
		now=ch[now][tmp];
		++cnt[now];
	}
}

il int query(re char str[]){
	int now=0,len=strlen(str+1);
	for(re int i=1;i<=len;++i){
		int tmp;
		if(str[i]>='a' && str[i]<='z') tmp=str[i]-'a';
		else if(isdigit(str[i])) tmp=str[i]-'0'+52;
		else tmp=str[i]-'A'+26;
		if(!ch[now][tmp]) return 0;
		now=ch[now][tmp];
	}
	return cnt[now];
}

il void solve(){
	n=read(),m=read();
	
	tot=0;
	for(re int i=1;i<=n*30;++i){
		cnt[i]=0;
		for(re int j=0;j<65;++j){
			ch[i][j]=0;
		}
	}
		
	while(n--){
		scanf("%s",s+1);
		ins(s);
	}
	while(m--){
		scanf("%s",t+1);
		printf("%d\n",query(t));
	}
	
}

signed main(){
	int T=read();
	while(T--) solve();
	
	return 0;
}
2022/11/2 13:44
加载中...