Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 1
- #include <iostream>
- #include <vector>
- using namespace std;
- vector<int> permutation;
- vector<bool> colored;
- int n, k;
- int factorial(int a) {
- if (a > 2){
- return a * factorial(a - 1);
- }
- return max(a, 1);
- }
- void genPerm() {
- for (int i = 0, j = 1, next_unused = 0; i < n; i++) {
- int computed_factorial = factorial(n - i - 1);
- j = 1; next_unused = 0;
- for (int colored_perm = (k - 1) / computed_factorial + 1; j < n + 1; j++) {
- if (!colored[j])
- next_unused++;
- if (colored_perm == next_unused)
- break;
- }
- permutation[i] = j;
- colored[j] = true;
- k = (k - 1) % computed_factorial + 1;
- }
- }
- void printAnswer(){
- for (auto &i: permutation)
- cout << i << " ";
- }
- int main() {
- cin >> n >> k;
- permutation.resize(n);
- colored.resize(n + 1);
- genPerm();
- printAnswer();
- return 0;
- }
- // 2
- #include <iostream>
- #include <vector>
- using namespace std;
- int n, k;
- vector<int> combination;
- void show() {
- for (auto& i: combination)
- cout << i << " ";
- cout << "\n";
- }
- void solve(int i) {
- if (!k) {
- show();
- } else {
- for (int j = i; j <= n - k; j++) {
- k--;
- combination.push_back(j + 1);
- solve(j + 1);
- combination.pop_back();
- k++;
- }
- }
- }
- int main() {
- cin >> n >> k;
- solve(0);
- return 0;
- }
- // 3
- #include <iostream>
- #include <vector>
- using namespace std;
- int n, k, m;
- vector<bool> used;
- vector<int> ans;
- void generate() {
- int local_m = m - 1, local_n = n - 1, local_k = k - 1;
- for (int i = 0; i < k; i++) {
- int res = 1, local_pos = 0;
- for (int ii = local_n; ii >= local_n - local_k + 1; ii--)
- res *= ii;
- int block_cnt = local_m / res + 1;
- local_m = local_m - (block_cnt - 1) * res;
- local_n = local_n - 1;
- local_k = local_k - 1;
- while (block_cnt != 0) {
- if (!used[local_pos]) { block_cnt-=1; }
- local_pos++;
- }
- used[local_pos - 1] = true;
- ans[i] = local_pos;
- }
- }
- int main() {
- cin >> n >> k;
- cin >> m;
- used.resize(n);
- ans.resize(k);
- generate();
- for (auto &i : ans)
- cout << i << ' ';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement