Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 1
- #include <iostream>
- #include <vector>
- using namespace std;
- int const FACTORIAL[13] =
- {
- 1, 1, 2,
- 6, 24, 120,
- 720, 5040, 40320,
- 362880, 3628800, 39916800,
- 479001600
- };
- class Task {
- vector<int> res_perm;
- vector<bool> used;
- public:
- Task(int n) {
- res_perm.resize(n);
- used.resize(n + 1);
- }
- void solve(int n, int k) {
- for (int i = 0; i < n; i++) {
- int j = 1, pos = 0, skip = 1 + (k - 1) / FACTORIAL[n - i - 1];
- for (; j <= n; j++) {
- if (!used[j]) {
- pos += 1;
- }
- if (skip == pos) {
- break;
- }
- }
- k = 1 + (k - 1) % FACTORIAL[n - i - 1];
- res_perm[i] = j;
- used[j] = true;
- }
- for (auto &i: res_perm)
- cout << i << ' ';
- }
- };
- int main() {
- int n, k;
- cin >> n >> k;
- Task task(n);
- task.solve(n, k);
- return 0;
- }
- //2
- #include <iostream>
- #include <vector>
- using namespace std;
- class Task{
- vector<int> answer;
- public:
- void solve(int i, int n, int k) {
- if (k == 0) {
- for (auto &i : answer)
- cout << i << " ";
- cout << endl;
- } else {
- for (int j = i; j <= n - k; j++) {
- answer.push_back(j + 1);
- solve(j + 1, n, k - 1);
- answer.pop_back();
- }
- }
- }
- };
- int main() {
- int n, k;
- cin >> n >> k;
- Task task;
- task.solve(0, n, k);
- return 0;
- }
- //3
- #include <iostream>
- #include <vector>
- using namespace std;
- class Task {
- vector<int> answer;
- vector<bool> used;
- public:
- Task(int n, int k){
- answer.resize(k);
- used.resize(n);
- }
- void solve(int n, int k, int m) {
- int a = n - 1, b = k - 1;
- for (int i = 0; i < k; i++) {
- int amount = 1;
- for (int j = a; j >= a - b + 1; j--) {
- amount *= j;
- }
- a--;
- b--;
- int block = m / amount, position = 0;
- m -= block * amount;
- block++;
- while (block) {
- if (!used[position]) {
- block--;
- }
- position++;
- }
- answer[i] = position;
- used[position - 1] = true;
- }
- for (auto &i : answer)
- cout << i << " ";
- }
- };
- int main() {
- int n, k, m;
- cin >> n >> k >> m;
- Task task(n, k);
- task.solve(n, k, m - 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement