【悬关】16分#5AC#12346WA求助
查看原帖
【悬关】16分#5AC#12346WA求助
393511
Mobius_CaO楼主2023/8/14 21:12

RT

#include<bits/stdc++.h>
using namespace std;
const int N=3e6+5;
int t,p,ans;
int trie[N][64];
int vis[N];
int num(char c){
	if(c-'0'>=0&&c-'0'<=9)return c-'0';
	if(c-'A'>=0&&c-'A'<=26)return c-'A'+10;
	return c-'a'+37;
}
void init(int n){
	for(int i=0;i<n;i++){
		string str;
		cin>>str;
		int j=0,k=0;
		int c=num(str[j]);
		while(trie[k][c]&&j<str.length()){
			k=trie[k][c];
			c=num(str[++j]);
			vis[k]++;
		}
		for(;j<str.length();j++,k=p){
			c=num(str[j]);
			trie[k][c]=++p;
			vis[k]++;
		}
	}
	return ;
void ques(int q){
	for(int i=0;i<q;i++){
		string str;
		cin>>str;
		int j=0,c=num(str[j]),k=0,prek=k;
		bool bi=false;
  		if(!trie[k][c]){
				printf("0\n");
				bi=true;
				break;
			}
		}
		if(bi)continue;
		printf("%d\n",vis[prek]);
	}
	return ;
}
int main(){
	scanf("%d",&t);
	for(int i=0;i<t;i++){
		int n,q;
		scanf("%d%d",&n,&q);
		init(n);
		ques(q);for(int j=0;j<=p;j++){
			vis[j]=0;
			for(int k=0;k<64;k++){
				trie[j][k]=0;
			}
		}
		p=0;
	}
	return 0;
}

灰常感谢喵~o( =∩ω∩= )m

2023/8/14 21:12
加载中...