File tree Expand file tree Collapse file tree 1 file changed +40
-0
lines changed
solution/3400-3499/3470.Permutations IV Expand file tree Collapse file tree 1 file changed +40
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ long long f[105 ];
3
+ public:
4
+ vector<int > permute (int n, long long k) {
5
+ int i,j;
6
+ for (i=f[0 ]=1 ;i<=n;i++)if (f[i-1 ]>=k)f[i]=k;
7
+ else f[i]=f[i-1 ]*(i+1 >>1 );
8
+ if (!(n&1 ))f[n]*=2 ;
9
+ if (f[n]<k)return {};
10
+ k--;
11
+ vector<int > ans (n),a[2 ];
12
+ for (i=0 ;i<n;i++)a[i&1 ].push_back (i);
13
+ if (n&1 )
14
+ {
15
+ ans[0 ]=k/f[n-1 ]*2 ;
16
+ k-=ans[0 ]/2 *f[n-1 ];
17
+ }
18
+ else
19
+ {
20
+ ans[0 ]=k/f[n-1 ];
21
+ k-=ans[0 ]*f[n-1 ];
22
+ }
23
+ a[ans[0 ]&1 ].erase (lower_bound (a[ans[0 ]&1 ].begin (),a[ans[0 ]&1 ].end (),ans[0 ]));
24
+ for (i=1 ;i<n;i++)
25
+ {
26
+ if (n&1 )
27
+ {
28
+ ans[i]=a[i&1 ][k/f[n-i-1 ]];
29
+ }
30
+ else
31
+ {
32
+ ans[i]=a[(ans[0 ]^i)&1 ][k/f[n-i-1 ]];
33
+ }
34
+ k%=f[n-i-1 ];
35
+ a[ans[i]&1 ].erase (lower_bound (a[ans[i]&1 ].begin (),a[ans[i]&1 ].end (),ans[i]));
36
+ }
37
+ for (i=0 ;i<n;i++)ans[i]++;
38
+ return ans;
39
+ }
40
+ };
You can’t perform that action at this time.
0 commit comments