洛谷P1088火星人 stl全排列函式

2021-09-24 06:14:49 字數 1041 閱讀 5414

大概就是給你乙個排列(長為n,1~n的任意排列),此排列作為n進製的1,10進製加m後,用該n進製應怎樣表示(題目概括很殘,好像還錯了,直接去洛谷看題吧)

最簡單的方法,用全排列函式乙個乙個的找就行.

下面全排列函式

下乙個排列:next_permutation(陣列起始位置,陣列末位置)

例如:next_permutation(a+1,a+n+1) 找出陣列從a[1]到a[n]的下乙個排列

如果a[1]~a[n]為1 2 3 4 5

則next_permutation後為 1 2 3 5 4

上乙個排列:prev_permutation(a+1,a+n+1)

同理: 1 2 3 5 4 的上乙個排列為 1 2 3 4 5

下面,更重要的,康拓展開

康拓展開是找到乙個排列在其全排列中的位置

例如n=5的排列 共有120個

則12345 在其全排列中的位置是 1

54321 在其全排列中的位置是0

康拓展開的公式為x=an(n-1)!+a(n-1)(n-2)!+…a1(0)!

a(i)為第i位上的數是在未出現的數中排第幾,例如,第一位,當所有數都沒出現時,如果第一位是4,則其在未出現數中排第四,當4已出現,第二位如果是5,其在未出現數中,也排第四.

所以可以通過全排列來推其在全排列中的位置.但更重要的是,用其在全排列中的位置推其數列

例如,n=5,x=96 ,求這個數列具體是什麼!

x=96 說明,其前面有95個比他小的數列

所以95/4!= 3 …23 第一位上,有三個數比他小

23%6 = 3 …5 第二位上也有三個數比他小

5 % 2 = 2 …1 第三位上有兩個數比他小

以此類推,最後

結果是45321

為什麼95/4!的商是其第一位的數,因為x= an(n-1)!+…

可以看成an(n-1)是乙個大部分,後面所有是另一大部分,所以除以4!以後,得到的商應該是an,餘數是剩下的部分.所以可求.

end!

洛谷P1088 火星人(STL)

人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答。火星人用...

洛谷 P1088 火星人

題目描述 人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答...

洛谷 P1088 火星人

題目描述 人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答...