dalao求调
查看原帖
dalao求调
1056745
wen114248050楼主2024/7/20 10:04
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10,M=3e6+10;
long long T,n,q,cnt,lg;
long long trie[N][62],amount[M];
bool d[1005][105];
string s;
/*int num(char x)
{
	if('a'<=x&&x<='z') return x-'a';
	else if('A'<=x&&x<='Z') return x-'A'+26;
	else return x-'0'+52;
}*/
void search()
{
	cin>>s;
	int bj=0,flag=0;
	for(int i=0;i<s.length();i++)
	{
		int x=s[i]-'a';
		if(trie[bj][x]==0)
		{
			flag=1;
			break;
		} 
		bj=trie[bj][x];
	}
	if(flag==0)
	{
		for(int i=1;i<=n;i++)
		{
			if(d[bj][i])cout<<i<<" ";	
		}   	
	}
	cout<<endl;	
}
void insert(int y)
{
	cin>>s;
	int bj=0;
	for(int i=0;i<s.length();i++)
	{
		int x=s[i]-'a';
		if(trie[bj][x]==0) trie[bj][x]=++cnt;
		bj=trie[bj][x];
	}
	d[bj][y]=1;
}
int main()
{
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>lg;
			for(int j=1;j<=lg;j++)
			{
				insert(i);
			}	
		}
		cin>>q;
		for(int i=1;i<=q;i++)
		{
			search();
		}
	return 0;
}
2024/7/20 10:04
加载中...