求助
查看原帖
求助
261417
asasas楼主2022/8/18 23:18

Trie 树爆大0

#include <bits/stdc++.h>
using namespace std;
int idx(char x){
    return x-'a';
} 
int ch[1000005][30],xs[1000005][30],t;
int cnt[1000005];
char qwq[1000005];
int czmg=0;
void insert(int q){
		int u=0;
		int len=strlen(qwq);
		for (register int i=0;i<len;i++){
			int c=idx(qwq[i]);
			if (!ch[u][c]) ch[u][c]=++czmg;
			u=ch[u][c];
		}
		xs[u][q]=1;
}	
void find(){
	    bool ok=0;
		int u=0;
		int len=strlen(qwq);
		for (register int i=0;i<len;i++){
			int c=idx(qwq[i]);
			if (!ch[u][c]){
				ok=1;
				break;
			}
			u=ch[u][c];
		}
		if (!ok)
		for (register int i=1;i<=t;i++) if (xs[u][i]) cout << i << ' ';
		cout << endl;
}
int main(){
	cin >> t;
	for (register int i=1;i<=t;i++){
		int q;
		cin >> q;
		for (register int j=1;j<=q;j++){
			cin >> qwq;
			insert(i);
		}
	}
	int p;
	cin >> p;
	while(p--){
		cin >> qwq;
		find();
	}
}
2022/8/18 23:18
加载中...