阅读理解
题目链接:阅读理解
题目描述
解题思路
t r i e trie trie 树板子题,思路可参考前缀统计
code
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
int n,m;
short v[600000][1010];
int trie[600000][26],tot=1;
void in(string s,int f)
{
int now=1,ls=s.size();
for(int i=0;i<ls;i++)
{
int c=s[i]-'a';
if(!trie[now][c])
trie[now][c]=++tot;
now=trie[now][c];
}
if(v[now][v[now][0]]!=f)
v[now][++v[now][0]]=f;
}
void fd(string s)
{
int now=1,ls=s.size();
for(int i=0;i<ls;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 l;
string s;
scanf("%d",&l);
for(int j=1;j<=l;j++)
{
cin>>s;
in(s,i);
}
}
cin>>m;
for(int i=1;i<=m;i++)
{
string s;
cin>>s;
fd(s);
}
}