全排列康托展開

2021-10-02 03:46:10 字數 1165 閱讀 9057

n個元素有n!個不同的排列。將這n!個排列按字典序排列,並編號為0,1,…,n!-1。每個排列的編號為其字典序值。例如,當n=3時,6 個不同排列的字典序值如下:

0 1 2 3 4 5

123 132 213 231 312 321

任務:給定n 以及n 個元素的乙個排列,計算出這個排列的字典序值,以及按字典序排列的下乙個排列。

第1 行是元素個數n(n < 15)。接下來的1 行是n個元素的乙個排列。

第一行是字典序值,第2行是按字典序排列的下乙個排列。

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

4041

4243

4445

46

#include#define init(a,b) memset(a,b,sizeof(a))

#define ll long long

using namespace std;

const int inf=0x3f3f3f3f;

const int maxn=1e2+7;

const int mod=1e9+7;

ll jc[maxn];

ll cantor(ll *a,ll n)

return ans;

}void decantor(ll num,ll n)

printf("\n");

}int main(){

int n;

jc[0]=1;

for(int i=1;i<=15;i++)jc[i]=jc[i-1]*i;

while(~scanf("%d",&n)){

ll a[maxn];

for(int i=0;i

康托展開 全排列

今天找到了一篇非常好的介紹康托展開的文章!其核心是這一張圖 letter 儲存所需字母表 void initletter 初始化字母表 int fact int n 階乘 return result void output vector v 輸出生成的結果 cout endl void divisi...

康托展開 全排列

對於n個數的全排列,共有n!中排列方式,如何求某乙個序列在整個排列中的次序 從小到大 以9的全排枚舉例 842697513是1 9全排列的第幾個?高中數學排列組合問題,只需要做到不重不漏 首先看第一位為8,那麼第一位為1 7的全排列都比它小,共有7 8!個。在第一位為8的情況下,其次看第二位為4,那...

全排列 康托展開

includeusing namespace std int num 100 cnt void fun int pos,int n int judge int l,int r int main int judge int l,int r void fun int pos,int n for int ...