### 详细分析
1. 读取输入的N和K,以及N个数字。
2. 使用回溯算法生成所有可能的数字组合。
3. 对于每个组合,检查是否满足没有前置0且能被K整除。
4. 记录满足条件的最小数。
5. 输出满足条件的最小数,如果没有满足条件的数输出-1。
### 代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <limits>
using namespace std;
long long findMinNumber(int N, long long K, vector<int>& digits) {
sort(digits.begin(), digits.end());
long long minNumber = numeric_limits<long long>::max();
bool found = false;
do {
if (digits[0] == 0 && N > 1) continue; // Skip numbers with leading zero if N > 1
long long num = 0;
for (int i = 0; i < N; ++i) {
num = num * 10 + digits[i];
}
if (num % K == 0) {
if (!found || num < minNumber) {
minNumber = num;
found = true;
}
}
} while (next_permutation(digits.begin(), digits.end()));
return found ? minNumber : -1;
}
int main() {
int N;
long long K;
cin >> N >> K;
vector<int> digits(N);
for (int i = 0; i < N; ++i) {
cin >> digits[i];
}
cout << findMinNumber(N, K, digits) << endl;
return 0;
}