Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
29751 | 23级逯一鸣 | 【J】T2 | C++ | 通过 | 100 | 1 MS | 360 KB | 1141 | 2024-05-26 17:40:50 |
#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; }