- 题解
B题30分混分答案
- @ 2026-4-18 10:54:27
#include <bits/stdc++.h> using namespace std;
int main() {
int N, K;
long long X;
cin >> N >> K >> X;
vector S(N);
for (int i = 0; i < N; i++) {
cin >> S[i];
}
vector Q = S;
sort(Q.begin(), Q.end());
vector powN(K + 1);
powN[0] = 1;
for (int i = 0; i < K; i++) {
powN[i] = powN[i - 1] * N;
}
vector result;
long long x = X;
for (int pos = 0; pos < K; pos++) {
int rem = K - pos;
int t = 0;
while (t < N) {
string cur = Q[t];
int cnt = 1;
while (t + cnt < N && Q[t + cnt] == cur) {
cnt++;
}
long long sub_size = powN[rem - 1];
long long block = cnt * sub_size;
if (x > block) {
x -= block;
t += cnt;
} else {
int idx = (x - 1) / sub_size;
result.push_back(cur);
x = (x - 1) % sub_size + 1;
break;
}
}
}
for (const string& s : result) {
cout << s;
}
cout << endl;
return 0;
}