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