P8306字典树模板全部输出0求助
  • 板块灌水区
  • 楼主D0000
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/8/20 08:07
  • 上次更新2023/11/3 02:32:51
查看原帖
P8306字典树模板全部输出0求助
982681
D0000楼主2023/8/20 08:07
#include<bits/stdc++.h>
using namespace std;
int t,n,q,cnt;
struct node{
	int cnt;
	int word[64];
}a[100001];
int main(){
	scanf("%d",&t);
	while(t--){
		cnt=1;
		scanf("%d%d",&n,&q);
		for(int i=0;i<n;i++){
			string s;
			cin>>s;
			int nno=0;
			for(int j=0;j<64;j++)a[nno].word[j]=0;
			for(int j=0;j<s.size();j++){
				int ww;
				if(s[j]<='9'&&s[j]>='0')ww=s[j]-'0';
				else if(s[j]<='z'&&s[j]>='a')ww=s[j]-'a'+10;
				else ww=s[j]-'A'+36;
				if(a[nno].word[ww])nno=a[nno].word[ww],a[nno].cnt++;
				else{
					a[nno].word[ww]=nno=cnt;
					for(int k=0;k<64;k++)a[nno].word[k]=0;
					a[nno].cnt=1;
					cnt++;
				}
			}
		}
		while(q--){
			string s;
			cin>>s;
			int nno=0,ans=0;
			for(int j=0;j<s.size();j++){
				int ww;
				if(s[j]<='9'&&s[j]>='0')ww=s[j]-'0';
				else if(s[j]<='z'&&s[j]>='a')ww=s[j]-'a'+10;
				else ww=s[j]-'A'+36;
				if(a[nno].word[ww]&&j<s.size()-1)nno=a[nno].word[ww];
				else break;
				if(j==s.size()-1)ans=a[j].cnt;
			}
			cout<<ans<<endl;
		}
	}
}
2023/8/20 08:07
加载中...