Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stack>
- #include<math.h>
- #include<iostream>
- #include<algorithm>
- #include<string.h>
- #include<string>
- #include<set>
- #include<memory.h>
- #include<vector>
- #include<map>
- #include<queue>
- #include<iomanip>
- #include<ctime>
- #define forn(i, n) for (int i = 0; i < (n); i++)
- using namespace std;
- long long fact(int n) {
- return !n ? 1 : n * fact(n - 1);
- }
- bool u[10];
- void kPermutation(long long n, long long k) {
- k--;
- for (int i = 1; i <= n; i++)
- u[i] = 0;
- for (int i = 0; i < n; i++) {
- int K = 0;
- long long res = k / fact(n - i - 1) + 1;
- for (int j = 1; j <= n; ++j)
- if (!u[j]) {
- K++;
- if (K == res) {
- cout << j << ' ';
- u[j] = 1;
- break;
- }
- }
- k %= fact(n - i - 1);
- }
- }
- void numberPermutation() {
- vector <int> a;
- int n = 10;
- forn (i, n)
- a.push_back(i + 1);
- random_shuffle(a.begin(), a.end());
- forn (i, n)
- cout << a[i] << " ";
- cout << endl;
- long long res = 0;
- for (int i = 0; i < n; i++) {
- int tek = 0;
- for (int j = 1; j <= a[i]; ++j)
- if (!u[j])
- tek++;
- u[a[i]] = 1;
- res += (tek - 1) * fact(n - i - 1);
- }
- cout << res + 1 << endl;
- }
- int main() {
- srand(time(NULL));
- long long n, k;
- cin >> n >> k;
- kPermutation(n, k);
- cout << endl;
- forn (i, n)
- u[i] = false;
- numberPermutation();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement