题解
代码
#include <bits/stdc++.h>
using namespace std;
int n, k;
string s;
int num[10], cnt[10];
bool dfs(int now, int k, int mod) {
if (!now) {
if (k > num[0] || mod) return false;
cnt[0] = k;
if (k == 1) return true;
for (int i = 1; i <= 9; ++i) {
if (cnt[i])
return true;
}
cnt[0] = 0;
return false;
}
if (!k && !mod) return true;
int r = min(k, num[now]);
int l = max(0, r - 2);
for (int i = r; i >= l; --i) {
cnt[now] = i;
if (dfs(now - 1, k - i, (mod + i * now) % 3)) return true;
cnt[now] = 0;
}
return false;
}
int main() {
ios::sync_with_stdio(0);
int T;
cin >> T;
for (int cs = 1; cs <= T; ++cs) {
memset(num, 0, sizeof(num));
memset(cnt, 0, sizeof(cnt));
cin >> s >> k;
n = s.length();
for (int i = 0; i < n; ++i) {
num[s[i] - '0']++;
}
if (dfs(9, k, 0)) {
for (int i = 9; i >= 0; --i) {
for (int j = 0; j < cnt[i]; ++j) {
cout << i;
}
}
cout << endl;
} else
cout << -1 << endl;
}
return 0;
}