康拓展開與逆展開

2021-07-25 22:40:54 字數 807 閱讀 3645

題目鏈結

別人關於康托展開與逆展開的部落格

康拓展開是對乙個自然排列到乙個自然數的對映,它們是一一對應的。

#include

#include

#include

#include

#include

using

namespace

std;

struct zp

w;int hash[9]= ;

int flag[400010][3];

char sum[400010][30];

int z[9][4]= ;

string get_nhash(int s)//康拓逆展開

int cont=9;

while(cont--)

return ss;

}int get_hash(string s)//康拓展開

return ans;

}char get_ans(int a)

}void print(int a)

int len=ans.size();

for(int i=0;ivoid bfs()}}

}}int judge(string s)

}return ans&1;

}int main()

int ans=get_hash(s);

getchar();

if(judge(s))

printf("unsolvable\n");

else

cout

《這道題可以用a*寫但是我寫了好幾次都沒寫出來就放棄了

康拓展開與逆康拓展開

首先解釋一下,所謂的康拓展開,就是能夠通過乙個式子,得到乙個排列在所有排列中的按字典序排好後的位次。而逆康托展開,則是給出排列的位次,能夠計算出排列是什麼。下面先給出康拓展開的公式 其中ai 為整數,並且 0 ai ai表示原數的第 i位在當前未出現的元素中是排在第幾個 康拓展開是乙個雙射,因此常用...

康拓展開與康拓展開的逆

康拓展開一般是用於計算乙個全排列數字排在所有全排列的大小位置。那麼到底怎麼計算呢?敲重點 x a n n 1 a n 1 n 2 a i i 1 a 2 1 a 1 0 1 從第乙個數字開始到倒數第二個數字,計算需要計算的那個數字之後比這個數小的數字有幾個,再乘以 n x n是全排列的 數字,x是當...

康拓展開和逆康拓展開

康托展開就是一種特殊的雜湊函式 把乙個整數x展開成如下形式 x a n n a n 1 n 1 a 2 2 a 1 1 其中,a為整數,並且0 a表示1,2,3,n的排列如 按從小到大排列一共6種,就是123 132 213 231 312 321 代表的數字 1 2 3 4 5 6 也就是把10進...