### 详细分析
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 > 1long 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;
}