样例全对,不知道是哪里错了
Code:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int n, l, m, cur;
int nxt[1010][30][30];
bool flag[1010][30];
void ins(int q, string s) {
int l = s.size(), p = 0;
for (int i = 0; i < s.size(); ++i) {
int c = s[i] - 'a';
if (!nxt[q][p][c]) nxt[q][p][c] = ++cur;
p = nxt[q][p][c];
}
flag[q][p] = 1;
}
bool find(int q, string s) {
int l = s.size(), p = 0;
for (int i = 0; i < s.size(); ++i) {
int c = s[i] - 'a';
if (!nxt[q][p][c]) return 0;
p = nxt[q][p][c];
}
return flag[q][p];
}
int main() {
cin >> n;
for (int i = 1; i <= n; ++i) {
cur = 0;
cin >> l;
for (int j = 1; j <= l; ++j) {
string s;
cin >> s;
ins(i, s);
}
}
cin >> m;
for (int i = 1; i <= m; ++i) {
string s;
cin >> s;
int ans[1010], cur = 0;
for (int j = 1; j <= n; ++j)
if (find(j, s)) ans[++cur] = j;
for (int j = 1; j <= cur; ++j) {
if (j < cur) cout << ans[j] << ' ';
else cout << ans[j];
}
cout << endl;
}
return 0;
}