你说得对
查看原帖
你说得对
540363
AKPC楼主2023/7/31 19:56

我是标题党。

但是我样例 AC 本地都过但是 tm 全 WA 了,锰锌刚学 Trie,帮助者赏 33 关注!

#include <bits/stdc++.h>
using namespace std;
#define rint register int
int t,n,m,l,trie[2005][5005][27],sum;
bitset<1005>tmp[300005];
inline void add(int id,string s){
	int root=0;
	for (rint i=0;i<(int)s.length();i++){
		if (!trie[id][root][s[i]-'a']) trie[id][root][s[i]-'a']=++sum;
		root=trie[id][root][s[i]-'a'],tmp[id][root]=1;
	}
}
inline bool query(int id,string s){
	int root=0;
	for (rint i=0;i<(int)s.length();i++){
		if (tmp[id][trie[id][root][s[i]-'a']]==0) return 0;
		root=trie[id][root][s[i]-'a'];
	}
	return tmp[id][root];
}
int main(){
	cin>>n;
	for (rint i=1;i<=n;i++){
		cin>>l;
		sum=0;
		for (rint j=1;j<=l;j++){
			string s;
			cin>>s,add(i,s);
		}
	}
	cin>>m;
	for (rint i=1;i<=m;i++){
		string s;
		cin>>s;
		bool b=0;
		for (rint j=1;j<=n;j++) if (query(j,s)>=1) cout<<j<<' ',b=1;
		b?cout<<"\b\n":cout<<"\n";
	}
	return 0;
}
2023/7/31 19:56
加载中...