fork(2) download
  1. #include <bits/stdc++.h>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. unsigned long long factorial(unsigned long long n) {
  7. unsigned long long result = 1;
  8. for(unsigned long long i=1; i<=n;i++) {
  9. result *= i;
  10. }
  11. return result;
  12. }
  13.  
  14. // Function to display the array
  15. void display(vector<int> vec, int n)
  16. {
  17. for (int i = 0; i < n-1; i++) {
  18. cout << vec[i] << ' ';
  19. }
  20. cout << vec[n-1] << '\n';
  21. }
  22.  
  23. // Function to find the permutations
  24. void findPermutations(vector<int> vec, unsigned long long n, unsigned long long pom, unsigned long long how_many)
  25. {
  26. unsigned long long fac, fac2, shift;
  27. fac = factorial(n-1);
  28. fac2 = factorial(n);
  29. if(pom > fac2) {
  30. cout << 0; return;
  31. }
  32. shift = pom / fac;
  33. pom -= shift*fac;
  34. if(shift > 0){
  35. vec.insert(vec.begin(), vec[shift]);
  36. vec.erase(vec.begin() + vec[shift+1]);
  37. }
  38.  
  39. while(pom--) {
  40. next_permutation(vec.begin(), vec.end());
  41. }
  42.  
  43. while(how_many--) {
  44. display(vec, n);
  45. next_permutation(vec.begin(), vec.end());
  46. }
  47. }
  48.  
  49. // Driver code
  50. int main()
  51. {
  52. ios_base::sync_with_stdio(false);
  53. cin.tie(NULL);
  54. unsigned long long t, a, b, c;
  55. cin >> t;
  56. while(t--) {
  57. vector<int> vec;
  58. cin >> a >> b >> c;
  59. for(int i=1; i<=a; i++) {
  60. vec.push_back(i);
  61. }
  62. findPermutations(vec, vec.size(), b, c);
  63. cout << '\n';
  64. }
  65. return 0;
  66. }
Success #stdin #stdout 0s 5584KB
stdin
12
2 1 1
3 3 3
4 16 3
4 5 9
2 1 1
2 1 1
3 5 1
5 91 7
2 1 1
5 100 7
3 5 1
2 1 1
stdout
2 1

2 3 1
3 1 2
3 2 1

3 4 1 2
3 4 2 1
4 1 2 3

1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2

2 1

2 1

3 2 1

4 5 1 3 2
4 5 2 1 3
4 5 2 3 1
4 5 3 1 2
4 5 3 2 1
5 1 2 3 4
5 1 2 4 3

2 1

5 1 4 2 3
5 1 4 3 2
5 2 1 3 4
5 2 1 4 3
5 2 3 1 4
5 2 3 4 1
5 2 4 1 3

3 2 1

2 1