思路
板子题,用一个数组记录一下生词是在第几个短文里出现的就好了。
代码
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;
int trie[500010][30],n,m,tot=1,q;
int zc[510000],c;
string s;
struct node
{
int w[1010];
}v[510000];
void insert(int wz)
{
int dg=1;
for(int i=0; i<=s.size()-1; i++)
{
int cc=s[i]-96;
if(!trie[dg][cc])
trie[dg][cc]=++tot;
dg=trie[dg][cc];
}
v[dg].w[wz]=1;
}
void sfind()
{
int dg=1;
for(int i=0; i<=s.size()-1; i++)
{
int cc=s[i]-96;
if(!trie[dg][cc])
{
cout<<endl;
return;
}
dg=trie[dg][cc];
}
c=0;
for(int i=1; i<=n; i++)
if(v[dg].w[i]&&c==0)
{
printf("%d",i);
c=1;
}
else if(v[dg].w[i])
printf(" %d",i);
cout<<endl;
}
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
{
scanf("%d",&m);
for(int j=1; j<=m; j++)
{
cin>>s;
insert(i);
}
}
cin>>q;
for(int i=1; i<=q; i++)
{
cin>>s;
sfind();
}
return 0;
}