5 至 8 和 15 至 20 WA,其余 AC。
#include <bits/stdc++.h>
using namespace std;
#define ll int
#define il inline
#define N 500005
il ll rd(){
ll s = 0, w = 1;
char ch = getchar();
for (;ch < '0' || ch > '9'; ch = getchar()) if (ch == '-') w = -1;
for (;ch >= '0' && ch <= '9'; ch = getchar()) s = ((s << 1) + (s << 3) + ch - '0');
return s * w;
}
ll rt[N], n, m, son[N][26], x, en = 1, rk[N], ex;
string s[N], t;
struct cp{
string s;
ll id;
}h[N];
il bool cmp(cp a, cp b){return a.s < b.s;}
ll tr[80 * N], ls[80 * N], rs[80 * N], ep;
void add(ll &p, ll l, ll r, ll x, ll k){
if (l > x || r < x) return ;
if (!p) p = ++ep;
if (l == x && r == x) return tr[p] += k, void(0);
ll mid = (l + r) >> 1;
add(ls[p], l, mid, x, k), add(rs[p], mid + 1, r, x, k);
tr[p] = tr[ls[p]] + tr[rs[p]];
}
ll ask_rk(ll p, ll l, ll r, ll k){
if (!p) return -1;
if (l == r) return l;
ll mid = (l + r) >> 1;
if (tr[ls[p]] >= k) return ask_rk(ls[p], l, mid, k);
else return ask_rk(rs[p], mid + 1, r, k - tr[ls[p]]);
}
int main(){
// freopen ("editor.in", "r", stdin);
// freopen ("editor.out", "w", stdout);
n = rd();
for (int i = 1; i <= n; i++){
cin >> s[i];
h[i] = cp{s[i], i};
ll len = s[i].size(), u = 1;
for (int j = 0; j < len; j++){
if (!son[u][s[i][j] - 'a']) son[u][s[i][j] - 'a'] = ++en;
u = son[u][s[i][j] - 'a'];
}
}
sort (h + 1, h + n + 1, cmp);
for (int i = 1; i <= n; i++) rk[h[i].id] = i;
m = rd();
for (int i = 1; i <= n; i++){
ll len = s[i].size(), u = 1;
for (int j = 0; j < len; j++) add(rt[u], 1, m * n + n, m * n + rk[i], 1), u = son[u][s[i][j] - 'a'];
add(rt[u], 1, m * n + n, m * n + rk[i], 1);
}
for (int qq = 1; qq <= m; qq++){
cin >> t;
x = rd();
ll len = t.size(), u = 1;
for (int i = 0; i < len; i++){
if (!son[u][t[i] - 'a']){u = -1;break;}
u = son[u][t[i] - 'a'];
}if (u == -1){
puts("404Error");
continue;
}ll pk = min(x, tr[rt[u]]), pio = ask_rk(rt[u], 1, m * n + n, pk), poi = pio % n;
if (poi == 0) poi = n;
t = h[poi].s;
len = t.size(), u = 1;
for (int i = 0; i < len; i++){
cout << t[i];
add(rt[u], 1, m * n + n, pio, -1), add(rt[u], 1, m * n + n, pio - n, 1);
u = son[u][t[i] - 'a'];
}add(rt[u], 1, m * n + n, pio, -1), add(rt[u], 1, m * n + n, pio - n, 1);puts("");
// cout << pio << " " << poi << "\n";
}
return 0;
}
/*
5
uva
usaco
usa
usssu
konjac
11
u 2
u 2
kkk 1
uv 2
us 3
u 4
u 1
u 2
k 1
u 3
usa 1
*/