这三个题的代码分别对应第二个第一个第三个 在刘汝佳蓝书上我遇到了这个康托展开题. 当时去了解了一下,发现很有意思 百度上的康托展开定义 原理介绍 编辑 康托展开运算 其中, 为整数,并且 . 的意义为在ai之后出现的数有几个比他小 康托展开的逆运算 既然康托展开是一个双射,那么一定可以通过康托展开值求出原排列,即可以求出n的全排列中第x大排列. 如n=5,x=96时: 首先用96-1得到95,说明x之前有95个排列.(将此数本身减去1)用95去除4! 得到3余23,说明有3个数比第1位小,所以第…
目录 一.关于康托展开 1.什么是康托展开 2.康托展开实现原理 二.具体实施 1.模板 一.关于康托展开 1.什么是康托展开 求出给定一个由1n个整数组成的任意排列在1n的全排列中的位置. 解决这样问题的算法叫康托展开. 例如: \(n=4\),序列a={\(1,3,4,2\)},那么a在1~4中的全排列位置为第4个. 2.康托展开实现原理 要知道序列a排在第几位,我们就需要知道序列a之前有多少位. 我们按照上面的栗子计算: 1.比1小的数有0个,有\(0\times(4-1)!=0\)种排列…
http://poj.org/problem?id=1077 http://acm.hdu.edu.cn/showproblem.php?pid=1043 X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0!.这就是康托展开.康拓展开可以用来表示排列状态,对于本题的9个数字的所有排列只需要9位,所有状态…
目录 引入 这位老爷子就是康托 基本概念 康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩.设有n个数(1,2,3,4,-,n),可以有组成不同(n!种)的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次. 所以,康托展开是为了把一种全排列压缩成一个整数,它的实质是计算当前排列在所有由小到大全排列中的名次,因此是可逆的,称为逆康托展开(这篇博客不会讲). 基本原理 我们用a[i]表示位于位置i后面的数小于A[i]值的个数. 公式长这样: \(X=\…
因为某人@ZAGER挖坑让我讲一下康托展开,所以发现了这个题,顺便说一下康托展开是个什么东西 题目概括 给定n与一个数列,要求求出给定数列在n的全排列中的排名(按照字典序从小到大排列) 康托展开 先放概念: 康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩. 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的. --来源于度娘 双射的概念我也不是很理解 所以直接给出康托展开的作用: 康托展开的作用是求n个数的全排列中某一个序列在所有排列中的次序(该排列次序…
UVA - 11525 Permutation 题意:输出1~n的所有排列,字典序大小第∑k1Si∗(K−i)!个 学了好多知识 1.康托展开 X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中a[i]为第i位是i往右中的数里 第几大的-1(比他小的有几个). 其实直接想也可以,有点类似数位DP的思想,a[n]*(n-1)!也就是a[n]个n-1的全排列,都比他小 一些例子 http://www.cnblogs.com/hxsyl…
康托展开(有关全排列) 康托展开:已知一个排列,求这个排列在全排列中是第几个 康托展开逆运算:已知在全排列中排第几,求这个排列 定义: X=an(n-1)!+an-1(n-2)!+...+ai(i-1)!+...+a21!+a1*0! ai为整数,并且0<=ai<i(1<=i<=n) 简单点说就是,判断这个数在其各个数字全排列中从小到大排第几位. 比如 1 3 2,在1.2.3的全排列中排第2位. 康托展开有啥用呢? 维基:n位(0~n-1)全排列后,其康托展开唯一且最大约为n!,…
题目描述 求n的从小到大第m个全排列(n≤20). 输入 n和m 输出 输出第m个全排列,两个数之间有一空格. 样例输入 3 2 样例输出 1 3 2 #include<cstdio> #include<cstring> ,,,,,,,,,, ,,,, ,,, ,,, }; ]; void invKT(int ans[], int n, int k) { int i, j, t; memset(vis, , sizeof(vis)); k--; ; i< n;++i) { t…
做这题先看:http://blog.csdn.net/u010372095/article/details/9904497 Problem Description 在魔方风靡全球之后不久,Rubik先生发明了它的简化版——魔板.魔板由8个同样大小的方块组成,每个方块颜色均不相同,可用数字1-8分别表示.任一时刻魔板的状态可用方块的颜色序列表示:从魔板的左上角开始,按顺时针方向依次写下各方块的颜色代号,所得到的数字序列即可表示此时魔板的状态.例如,序列(1,2,3,4,5,6,7,8)表示魔板状态…
题目传送门 Uim的情人节礼物·其之壱 题目描述 情人节到了,Uim打算给他的后宫们准备情人节礼物.UIm一共有N(1<=N<=9)个后宫妹子(现充去死 挫骨扬灰!). 为了维护他的后宫的稳定.他通过编程,得出了一个送礼物的最佳顺序.这个我们管不着. 然而他认为,如果什么事情做得太圆满不是什么好事.于是他希望得到 原定顺序 的 前一个字典序的序列. 输入输出格式 输入格式: 第一行一个整数N 第二行N个整数,表示原定排列 输出格式: 前一个排列 输入输出样例 输入样例#1: 3 1 3 2 输…