NYOJ 139 我排第幾個(康托展開)

2022-03-18 15:43:29 字數 1425 閱讀 2002

時間限制:1000 ms  |  記憶體限制:65535 kb

難度:3

描述現在有"abcdefghijkl」12個字元,將其所有的排列中按字典序排列,給出任意一種排列,說出這個排列在所有的排列中是第幾小的?

輸入第一行有乙個整數n(0

輸出輸出乙個整數m,佔一行,m表示排列是第幾位;

樣例輸入

3

abcdefghijkl

hgebkflacdji

gfkedhjblcia

樣例輸出

1

302715242

260726926

1/*2

name: nyoj--139--我排第幾個34

author: 日天大帝

5date: 29/04/17 10:49

6description: 康托展開 7*/

8 #include9

using

namespace

std;

10int

main()

17int t;cin>>t;

18while(t--)

28 num += cnt*jiecheng[str.size()-i-1

];29

}30 cout<1

<32return0;

33 }

看了這個例子應該好理解點:

例1 的全排列,並且已經從小到大排序完畢

(1)找出第96個數

首先用96-1得到95

用95去除4! 得到3餘23

有3個數比它小的數是4

所以第一位是4

用23去除3! 得到3餘5

有3個數比它小的數是4但4已經在之前出現過了所以第二位是5(4在之前出現過,所以實際比5小的數是3個)

用5去除2!得到2餘1

有2個數比它小的數是3,第三位是3

用1去除1!得到1餘0

有1個數比它小的數是2,第二位是2

最後乙個數只能是1

所以這個數是45321

(2)找出第16個數

首先用16-1得到15

用15去除4!得到0餘15

用15去除3!得到2餘3

用3去除2!得到1餘1

用1去除1!得到1餘0

有0個數比它小的數是1

有2個數比它小的數是3 但由於1已經在之前出現過了所以是4(因為1在之前出現過了所以實際比4小的數是2)

有1個數比它小的數是2 但由於1已經在之前出現過了所以是3(因為1在之前出現過了所以實際比3小的數是1)

有1個數比它小得數是2 但由於1,3,4已經在之前出現過了所以是5(因為1,3,4在之前出現過了所以實際比5小的數是1)

最後乙個數只能是2

所以這個數是14352

nyoj 139 我排第幾個(康托展開)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 現在有 abcdefghijkl 12個字元,將其所有的排列中按字典序排列,給出任意一種排列,說出這個排列在所有的排列中是第幾小的?輸入 第一行有乙個整數n 0 輸出輸出乙個整數m,佔一行,m表示排列是第幾位 樣例輸入 3 ab...

nyoj 139 我排第幾個 數學 康托展開

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 現在有 abcdefghijkl 12個字元,將其所有的排列中按字典序排列,給出任意一種排列,說出這個排列在所有的排列中是第幾小的?輸入 第一行有乙個整數n 0 輸出輸出乙個整數m,佔一行,m表示排列是第幾位 樣例輸入 3 ab...

(康托展開解釋) NYOJ 139 我排第幾個

描述 現在有 abcdefghijkl 12個字元,將其所有的排列中按字典序排列,給出任意一種排列,說出這個排列在所有的排列中是第幾小的?輸入 第一行有乙個整數n 0 輸出輸出乙個整數m,佔一行,m表示排列是第幾位 樣例輸入 3 abcdefghijkl hgebkflacdji gfkedhjbl...