RT,一直wrong on #2 调不出来。
code:
#include <bits/stdc++.h>
using namespace std;
const int kMaxN = 1e6 + 5;
int w[kMaxN][26], st[kMaxN], fa[kMaxN], v[kMaxN], lx[28], rx[28], ans, vis, tot, n, m, t;
string s;
void Update(string s) {
int p = 0;
v[p]++;
for (int i = 0; i < s.size(); i++) {
int x = s[i] - 'a';
!w[p][x] && (w[p][x] = ++tot, fa[tot] = p, st[tot] = x);
p = w[p][x], v[p]++;
}
}
void Dfs(int u, int x) {
if (vis) {
return;
}
for (int i = 1; i <= 26; i++) {
lx[i] = lx[i - 1] + v[w[u][i - 1]] * bool(w[u][i - 1]);
}
for (int i = 26; i >= 1; i--) {
rx[i] = rx[i + 1] + bool(v[w[u][i - 1]]) * bool(w[u][i - 1]);
}
int val = 0, sx = 0;
for (int i = 0; i < 26; i++) {
val += bool(v[w[u][i]]) * bool(w[u][i]);
sx += v[w[u][i]] * bool(w[u][i]);
}
(x + val + v[u] - sx >= m) && (vis = 1, ans = u);
for (int i = 0; i < 26; i++) {
if (w[u][i]) {
Dfs(w[u][i], lx[i] + rx[i + 2] + x + v[u] - sx);
}
}
}
void Solve() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> s;
Update(s);
}
s = "";
Dfs(0, 0);
for (int i = ans; i; i = fa[i]) {
s = char(st[i] + 'a') + s;
}
if (ans == 0) {
cout << "EMPTY";
} else {
cout << s << "\n";
}
}
void Init() {
fill(w[0], w[tot + 1], 0);
fill(fa, fa + tot + 1, 0);
fill(st, st + tot + 1, 0);
fill(v, v + tot + 1, 0);
tot = vis = ans = 0;
}
int main() {
ios ::sync_with_stdio(0), cin.tie(0), cout.tie(0);
for (cin >> t; t; t--) {
Solve();
Init();
}
return 0;
}