50分Trie求助,
查看原帖
50分Trie求助,
475509
zzl340楼主2021/12/18 18:22
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#include<cmath>
using namespace std;
void read(int &x){char ch = getchar();x = 0;for (; ch < '0' || ch > '9'; ch = getchar());for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';}
const int N = 2100;
const int M = 1500010; 
int son[M][31],cnt;
int en[M*2];
char ch[M*2];
void insert(){
	scanf("%s",ch+1);
	int p = 0;
	int len = strlen(ch+1);
	for(int i =1;i<=len;i++){
		int u = ch[i]-'a';
		if(!son[p][u])son[p][u] = ++cnt;
		p = son[p][u];
	}
	en[p] = len;
}
long long query(){
	int p = 0;
	long long ans =0 ;
	scanf("%s",ch);
	int len = strlen(ch);
	for(int i=0;i<len;i++){
		int u = ch[i]-'a';
		if(!son[p][u]){
			if(en[p]){
				ans+=en[p];
				p = 0;
			}else{
				return ans;
			}
		}
		p = son[p][u];
		
	}
	if(en[p])ans+=en[p];
	return ans;
}
void solve(){
	printf("%lld\n",query());
}
int main(){

	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)insert();
	for(int i=1;i<=m;i++){
		

		solve();
	}
	return 0;
}
2021/12/18 18:22
加载中...