提交时间:2024-05-26 17:40:50

运行 ID: 29751

#include <algorithm> #include <cstdio> #include <iostream> #include <string> #include <unordered_set> #include <vector> using namespace std; using i64 = long long; unordered_set<int> num; vector<string> curr; inline string join(const vector<string>& arr) { string res; for (const auto& x : arr) res += x; return res; } void add() { vector<string> s(curr); sort(s.begin(), s.end()); do { num.emplace(atoi(join(s).c_str())); } while (next_permutation(s.begin(), s.end())); } void choose(const vector<string>& a, int n, int k, int lst = -1) { if (k <= 0) { add(); return; } else if (lst >= n) return; for (int i = lst + 1; i + k <= n; ++i) { curr.emplace_back(a[i]); choose(a, n, k - 1, i); curr.pop_back(); } } int main() { int n, k; vector<string> a; cin >> n >> k; for (int i = 0; i < n; ++i) { string x; cin >> x; a.emplace_back(x); } choose(a, n, k); cout << num.size() << '\n'; return 0; }