你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数。比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等。 现在给定一个数,问在这个数之前有多少个数。(注意这个数不会有前导0). Solution 可重复康托展开 常 ...
分类:
其他好文 时间:
2020-02-16 16:28:24
阅读次数:
69
康托展开,是一种在$\mathcal{O}(n^2)$($n$为排列元素个数)时间复杂度求解某一排列在全排列中的次序的算法。 我们以一道例题引入: 排列的序号 题目描述: 给定一个数$n$和一个$n$个数的排列$a$,求$a$在$n$的全排列中的序号。 输入描述: 第一行一个整数$n$,第二行一个排 ...
分类:
其他好文 时间:
2020-02-07 22:25:12
阅读次数:
105
康拓展开与逆康拓展开 一.简介 首先解释一下,所谓的康拓展开,就是能够通过一个式子,得到一个排列在所有排列中的按字典序排好后的位次。而逆康托展开,则是给出排列的位次,能够计算出排列是什么。 下面先给出康拓展开的公式 其中ai为整数,并且 0≤ai<i ,1≤ i ≤ n。 ai表示原数的第i位在当前 ...
分类:
其他好文 时间:
2020-01-29 18:13:56
阅读次数:
62
"题目链接" 【题解】 逆康托展开。 考虑康托展开的过程。 K = ∑v[i] (n i)! 其中v[i]表示在a[i+1..n]中比a[i]小的数字的个数 (也即未出现的数字中它排名第几(从0开始)) 那么我们在逆康托展开的时候,就可以通过直接除(n i)!得到每个数字的v[i]的值。 然后通过给 ...
分类:
其他好文 时间:
2019-11-20 19:15:46
阅读次数:
51
传送门:https://www.luogu.org/problem/P5367 刚开始背的式子,一测WAWAWA......(式子背错了..... 然后请教了下大佬。 就考虑比当前排列字典序小的有哪些。 第i个位置,后边剩下n-i个位置没有填,所以(n-i)! 考虑第i个位置,就再乘以( i-ask ...
分类:
其他好文 时间:
2019-10-25 10:15:18
阅读次数:
72
[算法总结]康托展开Cantor Expansion 一、关于康托展开 1.什么是康托展开 求出给定一个由1~n个整数组成的任意排列在1~n的全排列中的位置。 解决这样问题的算法叫康托展开。 例如: $n=4$,序列a={$1,3,4,2$},那么a在1~4中的全排列位置为第4个。 2.康托展开实现 ...
分类:
编程语言 时间:
2019-10-24 15:27:19
阅读次数:
94
字典序:(联合康托展开就也可以按照中介数求) 邻位对换、递增进位制数,递减进位制数:具体的实现和算法讲解如下: 代码。。C++版的实现并不好。。因为是挨个向后找的,如果K很大的时候会超时,不过。。。思路是这样。。。,第二版C++没有完成。。。因为不想写了,思路很简单,一次加减K就可以了 python ...
分类:
其他好文 时间:
2019-10-09 22:37:53
阅读次数:
177
问题描述 "LG5367" 题解 康托展开公式: $$ans=1+(\sum_{i=1}^{n}{a_i})\times(n i)!$$ 用树状数组维护一下$\sum$里面的东西,前缀积维护后面的东西。 $\mathrm{Code}$ cpp include using namespace std; ...
分类:
其他好文 时间:
2019-09-29 19:30:47
阅读次数:
86
含义 康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。 原理 X = s1(n-1)! + s2(n-2)! + s3(n-3)! + …… + sn-1 * 1! + sn * 0! 其中si表示在第i ...
分类:
其他好文 时间:
2019-09-15 11:09:06
阅读次数:
108