全RE
查看原帖
全RE
468238
Lawsless楼主2023/12/13 20:50
#include <bits/stdc++.h>
using namespace std;

int t;
bitset < 1005 > b[500005];

struct node{
	short son[30];
};

node trie[500005];

int pos = 0;

void insert(string s,int tag)
{
	int len = s.size();
	int p = 0;
	for (int i = 0;i < len;i++)
	{
		int ch = s[i] - 'a';
		if (trie[p].son[ch] == 0) trie[p].son[ch] = ++pos;
		p = trie[p].son[ch];
	}
	b[p][tag] = 1;
}

void query(string s)
{
	int len = s.size();
	int p = 0;
	for (int i = 0;i < len;i++)
	{
		int ch = s[i] - 'a';
		p = trie[p].son[ch];
		if (p == 0) return;
	}
	for (int i = 1;i <= t;i++)
		if (b[p][i]) cout << i << " ";
	cout << endl;
}

int main()
{
	cin >> t;
	string s;
	for (int i = 1;i <= t;i++)
	{
		int l;
		cin >> l;
		for (int j = 1;j <= l;j++)
		{
			cin >> s;
			insert(s,i);
		}
	}
	cin >> t;
	for (int i = 1;i <= t;i++)
	{
		cin >> s;
		query(s);
	}
	return 0;
}


2023/12/13 20:50
加载中...