为什么这么慢???
查看原帖
为什么这么慢???
1164775
Jadonyzx楼主2024/5/31 20:55
#include<bits/stdc++.h>
#define maxn 3000010
using namespace std;
inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
	return x*f;
}
inline void write(int x){
	if(x<0){
		putchar('-');
		write(-x);
		return;
	}
	if(x>=10)write(x/10);
	putchar(x%10+'0');
	return;
}
int n,q,T,p,len;
char ccf[3000010];
int trie[maxn][150],cnt,siz[maxn];
void init(){
	for(int i=0;i<=cnt;++i){
		for(int j=0;j<=140;++j)
			trie[i][j]=0;
		siz[i]=0;
	}
	cnt=0;return;
}
signed main(){
	//ios::sync_with_stdio(0);
	//cin.tie(0);cout.tie(0);
	T=read();
	while(T--){
		init();
		n=read();q=read();
		for(int i=1;i<=n;++i){
			cin>>ccf;
			len=strlen(ccf);
			//insert
			p=0;
			for(int j=0;j<len;++j){
				int c=(int)ccf[j];
				if(trie[p][c]==0)trie[p][c]=++cnt;
				p=trie[p][c];
				siz[p]++;
			}
		}
		for(int i=1;i<=q;++i){
			cin>>ccf;
			len=strlen(ccf);
			//find
			p=0;bool f=1;
			for(int j=0;j<len;++j){
				int c=(int)ccf[j];
				if(!trie[p][c]){f=0;break;}
				p=trie[p][c];
			}
			if(f)cout<<(siz[p]);
			else cout<<(0);
			cout<<('\n');
		}
	}
	return 0;
}
2024/5/31 20:55
加载中...