rt,样例没问题,但也不至于全 RE 吧……
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1e3 + 10;
const int MAXM = 5e5 + 10;
int ch[MAXM][26], tot;
bitset<MAXM> vis[MAXN];
inline
void insert(char *s, int p) {
int len = strlen(s), k = 0;
for (int i = 0; i < len; i++) {
if (!ch[k][s[i] - 'a']) ch[k][s[i] - 'a'] = ++tot;
k = ch[k][s[i] - 'a'];
}
vis[k][p] = 1;
}
int n, m;
inline
void query(char *s) {
int len = strlen(s), k = 0;
for (int i = 0; i < len; i++) {
if (!ch[k][s[i] - 'a']) return ;
k = ch[k][s[i] - 'a'];
}
for (int i = 1; i <= n; i++) {
if (vis[k][i]) printf("%d ", i);
}
puts("");
}
char s[30];
int main() {
scanf("%d", &n);
for (int i = 1, k; i <= n; i++) {
scanf("%d", &k);
for (int j = 1; j <= k; j++) scanf("%s", s), insert(s, i);
}
scanf("%d", &m);
while (m--) scanf("%s", s), query(s);
}