heeeelp
查看原帖
heeeelp
452438
_Minecraft12345楼主2023/10/4 12:04

trie写法,样例过全RE

#include<bits/stdc++.h>
using namespace std;
int trie[500010][127];
vector<int> final[500010];//以这个点结束的单词
int cnt=1;
void add(string s,int id) { //文章id
	int pos=1;
	for(int i=0; i<s.length(); i++) {
		//s[i]-='a';
		if(trie[pos][s[i]-'a']) {
		} else {
			trie[pos][s[i]-'a']=++cnt;
		}
		pos=trie[pos][s[i]-'a'];
		if(i==s.length()-1) {
			if(final[pos].size()>0) {
				if(final[pos][final[pos].size()-1]!=id)
					final[pos].push_back(id);
			} else {
				final[pos].push_back(id);
			}
		}
	}
}
void query(string s) {
	int pos=1;
	for(int i=0; i<s.length(); i++) {
		if(trie[pos][s[i]-'a']) {
		} else {
			cout<<0<<'\n';
			return;
		}
		pos=trie[pos][s[i]-'a'];
		if(i==s.length()-1) {
			for(int i=0; i<final[pos].size()-1; i++) {
				cout<<final[pos][i]<<' ';
			}
			if(final[pos].size()>0) {
				cout<<final[pos][final[pos].size()-1]<<'\n';
			} else {
				cout<<"0\n";
			}
		}
	}
}
int main() {
	int n;
	cin>>n;
	for(int i=1; i<=n; i++) {
		int l;
		cin>>l;
		for(int j=1; j<=l; j++) {
			string s;
			cin>>s;
			add(s,i);
		}
	}
	int m;
	cin>>m;
	for(int i=1; i<=m; i++) {
		string s;
		cin>>s;
		query(s);
	}

	return 0;
}
2023/10/4 12:04
加载中...