一个小问题,为什么把换行从cout换成puts就没效果了呢?
然后是11个too long的大问题,调到人傻
#include<bits/stdc++.h>
#include<unordered_set>
using namespace std;
const int N = 1e6;
int n,m;
vector<int> cnt[N];
int idx = 0;
unordered_set<string> S;
int son[N][35];
void insert(char c[],int k)
{
int p = 0;
int len = strlen(c);
for(int i = 0; i < len; i ++)
{
int u = c[i] - 'a' + 1;
if(!son[p][u])
{
son[p][u] = ++ idx;
}
p = son[p][u];
}
cnt[p].push_back(k);
}
void query(char c[],int flag)
{
int p = 0;
int len = strlen(c);
for(int i = 0; i < len; i ++)
{
int u = c[i] - 'a' + 1;
if(!son[p][u])
{
cout << "\n";
return;
}
p = son[p][u];
}
for(int k = 0; k < cnt[p].size(); k ++)
{
cout << cnt[p][k];
if(k != cnt[p].size() - 1) cout << " ";
else cout << "\n";
}
}
char c[N];
signed main()
{
ios::sync_with_stdio(false);
cin >> n;
for(int i = 1; i <= n; i ++)
{
int len;
cin >> len;
S.clear();
for(int j = 1; j <= len; j ++)
{
memset(c, 0, sizeof c);
cin >> c;
if(!S.count(c))
{
insert(c,i);
S.insert(c);
}
}
}
cin >> m;
for(int i = 1; i <= m; i ++)
{
memset(c, 0, sizeof c);
cin >> c;
query(c,i);
}
return 0;
}