根据楼下的方法,把bool换成了bitset,但是WA
求dalao调
#include<bits/stdc++.h>
using namespace std;
char a[10010];
int trie[500010][26];
int n,x,m,cnt,len,now,f;
//bool b[500010][300];
bitset<110> b[500010];
int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0' or c>'9')
{
if(c=='-')
f=-1;
c=getchar();
}
while(c>='0' and c<='9')
{
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
void insert(int x)
{
scanf("%s",a+1);
len=strlen(a+1),now=0;
for(int i=1;i<=len;i++)
{
int p=a[i]-'a';
if(!trie[now][p])
trie[now][p]=++cnt;
now=trie[now][p];
}
b[now][x]=true;
}
void check()
{
scanf("%s",a+1);
len=strlen(a+1),now=0,f=1;
for(int i=1;i<=len;i++)
{
int p=a[i]-'a';
if(!trie[now][p])
{
f=0;
break;
}
now=trie[now][p];
}
if(f)
for(int i=1;i<=n;i++)
if(b[now][i])
printf("%d ",i);
puts("");
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
x=read();
for(int j=1;j<=x;j++)
insert(i);
}
m=read();
for(int i=1;i<=m;i++)
check();
return 0;
}