题目链接:阅读理解
分析
又是一道模板题
上代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m;
short v[600001][1001];//只能用short,不然会爆
int trie[600001][27],tot=1;
void in(string s,int t)
{
int now=1,len=s.length();
for(int i=0;i<=len-1;i++)
{
int c=s[i]-'a';
if(!trie[now][c])
{
trie[now][c]=++tot;
}
now=trie[now][c];
}
if(v[now][v[now][0]]!=t)
{
v[now][++v[now][0]]=t;
}
}
void fd(string s)
{
int now=1,len=s.length();
for(int i=0;i<=len-1;i++)
{
int c=s[i]-'a';
if(!trie[now][c])
{
cout<<endl;
return;
}
now=trie[now][c];
}
for(int i=1;i<=v[now][0];i++)
{
cout<<v[now][i];
if(i!=v[now][0]) cout<<' ';
}
cout<<endl;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
string s;
cin>>x;
for(int j=1;j<=x;j++)
{
cin>>s;
in(s,i);
}
}
cin>>m;
for(int i=1;i<=m;i++)
{
string s;
cin>>s;
fd(s);
}
return 0;
}