问题:给定的全排列,计算出它是第几个排列? 对于全排列,不清楚的可以参考全排列 方法:康托展开 对于一个长度为 n 的排列 num[1..n], 其序列号 X 为 写做伪代码为: 实现代码为: // 给定一个全排列, 计算它是第几个排列 #include <iostream> #include <a ...
分类:
其他好文 时间:
2016-06-01 23:04:24
阅读次数:
251
对于n个数的全排列,共有n!中排列方式,如何求某一个序列在整个排列中的次序(从小到大)?
以9的全排列举例:842697513是1-9全排列的第几个?(高中数学排列组合问题,只需要做到不重不漏)
首先看第一位为8,那么第一位为1-7的全排列都比它小,共有7*8!个。
在第一位为8的情况下,其次看第二位为4,那么第二位为1-3的全排列都比它小,共有1*3*7!个。
在第一位为8,第二位为4的...
分类:
其他好文 时间:
2016-05-12 23:57:18
阅读次数:
303
康托展开原公式:
把一个整数X展开成如下形式:
X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]*1!+a[1]*0!
其中a[i]为当前未出现的元素中是排在第几个(从0开始),并且0
知道康托展开展开以后,我们可以很容易的得到一种新的求1-n全排列的方法,只需要求出1-n全排列中的第一个,第二个...
分类:
其他好文 时间:
2016-05-11 07:24:24
阅读次数:
198
先搬一下(戳)维基百科的康托展开(戳): 康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。 由于是双射 所以可以求n的全排列里第k大的排列(逆康托展开) (伪)计算原理: 从某个元素找后面比这个元素小的数 ...
分类:
其他好文 时间:
2016-04-03 07:01:25
阅读次数:
130
八数码:貌似直接广搜,用康托展开(重看、记录)或hash(学习、记录)或STL的set判重 Python正则表达式、文件操作 学习 尝试对html进行解析 字典树、KMP、AC自动机(学习、记录) ...
分类:
其他好文 时间:
2016-04-03 06:59:10
阅读次数:
115
?_?感觉数论写不完 先记下来哪些要写 容斥原理 抽屉原理 置换群与Polya定理 母函数 二项式反演 莫比乌斯反演 积性函数 狄利克雷卷积 偏序关系理论 高斯消元 概率与期望问题 博弈论之极大极小过程 博弈论之Nim 鸽巢原理(或叫抽屉原理,或者球盒原理) 康托展开 矩阵相关的一系列 ?_?
分类:
其他好文 时间:
2016-02-19 20:33:34
阅读次数:
174
Magic SquaresIOI'96 Following the success of the magic cube, Mr. Rubik invented its planar version, called magic squares. This is a sheet composed of
分类:
移动开发 时间:
2016-02-14 16:45:18
阅读次数:
275
题目问一个合法字符串的字典序是第几个,合法的字符串是指里面的字符严格递增。 先判断合不合法,然后用类似康托展开的过程去求。大概过程就是用组合数算出某长度某前缀有几个,累加起来。 真难一遍写对。。 1 #include<cstdio> 2 #include<cstring> 3 using names
分类:
其他好文 时间:
2016-02-01 18:16:12
阅读次数:
142
题目链接:点击打开链接
题意:从1~k的所有排列中找到第n个排列, n由公式给出。
思路:可以发现, 这个公式就是康托展开公式(康托展开百科:点击打开链接)。 那么s[i]的意思就是i个数中当前数排在第几。
如此, 可以用二分+树状数组快速求解, 和一道BC题目神似。
细节参见代码:
#include
#include
#include
#include
#include
#includ...
分类:
编程语言 时间:
2016-01-20 17:28:36
阅读次数:
152