Advertisement
Nik_Perepelov

13 Насте

Dec 15th, 2021 (edited)
909
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.42 KB | None | 0 0
  1. // 1
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. vector<int> permutation;
  9. vector<bool> colored;
  10. int n, k;
  11.  
  12. int factorial(int a) {
  13.     if (a > 2){
  14.         return a * factorial(a - 1);
  15.     }
  16.     return max(a, 1);
  17. }
  18.  
  19.  
  20. void genPerm() {
  21.  
  22.     for (int i = 0, j = 1, next_unused = 0; i < n; i++) {
  23.         int computed_factorial = factorial(n - i - 1);
  24.         j = 1; next_unused = 0;
  25.         for (int colored_perm = (k - 1) / computed_factorial + 1; j < n + 1; j++) {
  26.             if (!colored[j])
  27.                 next_unused++;
  28.             if (colored_perm == next_unused)
  29.                 break;
  30.         }
  31.         permutation[i] = j;
  32.         colored[j] = true;
  33.         k = (k - 1) % computed_factorial + 1;
  34.     }
  35. }
  36.  
  37. void printAnswer(){
  38.  
  39.     for (auto &i: permutation)
  40.         cout << i << " ";
  41. }
  42.  
  43. int main() {
  44.     cin >> n >> k;
  45.  
  46.     permutation.resize(n);
  47.     colored.resize(n + 1);
  48.  
  49.     genPerm();
  50.     printAnswer();
  51.     return 0;
  52. }
  53.  
  54. // 2
  55.  
  56. #include <iostream>
  57. #include <vector>
  58.  
  59. using namespace std;
  60.  
  61. int n, k;
  62.  
  63. vector<int> combination;
  64.  
  65. void show() {
  66.     for (auto& i: combination)
  67.         cout << i << " ";
  68.     cout << "\n";
  69. }
  70.  
  71. void solve(int i) {
  72.     if (!k) {
  73.         show();
  74.     } else {
  75.         for (int j = i; j <= n - k; j++) {
  76.             k--;
  77.             combination.push_back(j + 1);
  78.             solve(j + 1);
  79.             combination.pop_back();
  80.             k++;
  81.         }
  82.     }
  83. }
  84.  
  85. int main() {
  86.     cin >> n >> k;
  87.  
  88.     solve(0);
  89.  
  90.     return 0;
  91. }
  92.  
  93. // 3
  94.  
  95. #include <iostream>
  96. #include <vector>
  97. using namespace std;
  98.  
  99.  
  100. int n, k, m;
  101. vector<bool> used;
  102.  
  103. vector<int> ans;
  104. void generate() {
  105.  
  106.     int local_m = m - 1, local_n = n - 1, local_k = k - 1;
  107.     for (int i = 0; i < k; i++) {
  108.         int res = 1, local_pos = 0;
  109.         for (int ii = local_n; ii >= local_n - local_k + 1; ii--)
  110.             res *= ii;
  111.         int block_cnt = local_m / res + 1;
  112.         local_m = local_m - (block_cnt - 1) * res;
  113.         local_n = local_n - 1;
  114.         local_k = local_k - 1;
  115.         while (block_cnt != 0) {
  116.             if (!used[local_pos]) { block_cnt-=1; }
  117.             local_pos++;
  118.         }
  119.         used[local_pos - 1] = true;
  120.         ans[i] = local_pos;
  121.     }
  122. }
  123.  
  124.  
  125. int main() {
  126.     cin >> n >> k;
  127.     cin >> m;
  128.     used.resize(n);
  129.     ans.resize(k);
  130.  
  131.     generate();
  132.  
  133.     for (auto &i : ans)
  134.         cout << i << ' ';
  135.     return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement