【康托展開】
康托展開:
1.定義:給一個n個不同數字的排列,求所有排列中比該排列要小的個數X
2.式子:$X=a_n*(n-1)!+a_{n-1}*(n-2)!+……+a_1*0!$,其中$a_i$表示第1位到第i-1位上的數字中,比第i位(從右往左數)數字的個數小的數量。
3.例子:如 {1、2、3、4}的一個排列 {2、1、4、3}:
X=1*3!+0*2!+1*1!+0*1!= 7。
逆康托展開
1.猜想:既然我們可以通過1-n的一個排列S,求出X(S),那麽是否給定一個X(S)可以求出S呢?
2.結論:可以。
對於給定的X(S)我們第一次對(n-1)!取商和余,商即為$a_n$;
第二次對讓第一次的余(n-2)!取商和和余,商即為$a_{n-1}$;
……
求出$a$以後,我們對$a$進行反解,即X(S)
3.例子:X(S)=7
X=1*3!+0*2!+1*1!+0*0!
所以$a$={1、0、1、0},那麽$s_4=2$,$s_3=1$,$s_2=4$,$s_1=3$。
反解成功。
【康托展開】
相關推薦
【康托展開】
個數 -s span 我們 不同 body 是否 clas str 康托展開: 1.定義:給一個n個不同數字的排列,求所有排列中比該排列要小的個數X 2.式子:$X=a_n*(n-1)!+a_{n-1}*(n-2)!+……+a_1*0!$,其
關於數論【康托展開及其逆運算】
-i mes 訪問 一個 3*3 關於 font color 多次 表示這個東西背了很多次,但是次次忘,希望這次能夠記住吧。 康托展開:問45231是n=5的全排列中第幾個排列?ans:= 3*4! + 3*3! + 1*2! + 1*1! + 0*0! =93這時求出的
HDU 3567 Eight II 【bfs預處理】【八碼問題】【康託展開】
Eight II Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 130000/65536 K (Java/Others) Total Submission(s): 4477 Accepted Submi
【哈希!簡】康托展開與逆康托展開
[] return 動態 bits n-1 階乘 clu 排列 oid 康托展開是利用全排列與當前排列次序的映射建立一個簡易哈希表 康托展開 ans=a0*(n-1)!+a1*(n-2)!+····+an*(n-n)! 找了半天解釋, 就是ai表示剩下的數字中小於當
【康拓展開&逆康託展開】
百度百科就夠了 自己的體會: 康託展開是基於比他小的前面的個數來進行計算的 另外康託展開也是一個數組到一個數的對映,因此也是可用於hash,用於空間壓縮。比如在儲存一個序列,我們可能需要開一個數組,如果能夠把它對映成一個自然數
HDU_1043 Eight 【逆向BFS + 康託展開 】【A* + 康託展開 】
一、題目 http://acm.hdu.edu.cn/showproblem.php?pid=1043 二、兩種方法 該題很明顯,是一個八數碼的問題,就是9宮格,裡面有一個空格,外加1~8的數字,任意一種情況,如果能通過移動空格使數碼組成 1 2 3 4 5 6 7 8 0 的形式,就輸
HDU 1043 Eight(反向BFS+打表+康托展開)
front int 二維 -i 轉換成 思路 離散化 strlen acm 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 題目大意:傳統八數碼問題 解題思路:就是從“12345678x”這
數論--康托展開
acm ima http -1 康托展開 規劃 聲明 動態 .com 先聲明,是康托,不是康娜,hhh 在我們做題中,搜索也好,動態規劃也好,我們往往有時候需要用一個數字表示一種狀態 比如有8個燈泡排成一排,如果你用0和1表示燈泡的發光情況 那麽一排燈泡就可以轉換
寬搜經典題之二——8數碼難題+康托展開
col out number ini 它的 proc == pty font 寬搜的定義在上次寬搜一中已講,現在直接看跟本題有關的”康托展開“。 什麽是”康托展開“?其實就是寬搜中實現其主要思想的一個工具——已經考察過的狀態就不再考察。 解釋:X=a[n]*(n-1)!+
康托展開與康托展開的逆運算
給定 ret void style 逆運算 == 依次 code 一位數 康托展開用來求數組是該全排列的第幾項,康托展開的逆運用用於求全排列的第幾個排列。 已知對於1-n個數的全排列,總共的可能是n!種。對於一個已知的數列比如45321,在第一項是4時,表示第一項在此之前
Gym10081 A - Arcade Game -康托展開、全排列、組合數變成遞推的思想
.net 全排列 over inpu net for each problem scan different 最近做到好多概率,組合數,全排列的題目,本鹹魚不會啊,我概率論都掛科了。。。 這個題學到了一個康托展開,有點用,瞎寫一下。。。 康托展開: 適用對象:沒有重復元
康托展開及其逆運算
判斷 搜索 bre 個數 margin break 而且 class 數組 一、定義 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! ai為整數,並且0<=ai<i(1<=i<=n) 簡單點
HDU - 1430 - 魔板( 康托展開 + BFS預處理 )
tdi 題目 -c 大小 cab 技術分享 clu () 雙向 魔板 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s
全排列和康托展開
bre 一位 個數 字典序 ... 由於 就是 div () 一、康托展開:全排列到一個自然數的雙射 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! ai為整數,並且0<=ai<i(1<=
[學習][Math]康托展開和逆康托展開
序列 計算 math strong 應用 全排列 第一個 因此 一個數 一、康托展開 問題:{1,2,3,4,5}5個數的全排列中,{2,3,1,5,4}排字典序的第幾位? 解決:計算{2,3,1,5,4}的康托展開值:x=a[1]*4!+a[2]*3!+a[3]*2!
hdu1027(逆康托展開)
自然 vector ear 表示 using src 全排列 排列 void src:http://acm.hdu.edu.cn/showproblem.php?pid=1027 一開始已經提過了,康托展開是一個全排列到一個自然數的雙射,因此是可逆的。即對於上述例子,在(
【牛客練習賽13】 A B C D【康拓展開】 E【DP or 記憶化搜尋】 F 【思維】
A 幸運數字Ⅰ 時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 262144K,其他語言524288K 64bit IO Format: %lld 題目描述 定義一個數字為幸運數字當且僅當它的所有數位都是4或者7。 比如說
康托展開
似的 問題 int 一個數 康托展開 isp play 簡潔 一位 按規矩,祭天 今天加了的內容是康托展開,因為時間原因就不附上題目了而且我也還沒有做題,就直接來看內容了 定義 它是用來求解一個數列的全排列下面的結果的序號的問題 \[ ∑(pi*(n-i)!)(i是第幾個
模板 - 數學 - 康托展開
printf std bsp tor static ++ 記錄 oid code 這個是從1開始的。 #include <bits/stdc++.h> using namespace std; #define ll long long stati
【雜湊!簡】康託展開與逆康託展開
康託展開是利用全排列與當前排列次序的對映建立一個簡易雜湊表 康託展開 ans=a0*(n-1)!+a1*(n-2)!+····+an*(n-n)! 找了半天解釋, 就是ai表示剩下的數字中小於當前該數的個數,然後乘以剩下的數字的階乘 意思也就說,剩下的數字中小於當前該