首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
POJ1850 Code(组合+康托展开)
】的更多相关文章
POJ1850 Code(组合+康托展开)
题目问一个合法字符串的字典序是第几个,合法的字符串是指里面的字符严格递增. 先判断合不合法,然后用类似康托展开的过程去求.大概过程就是用组合数算出某长度某前缀有几个,累加起来. 真难一遍写对.. #include<cstdio> #include<cstring> using namespace std; bool islegal(char *s){ ; s[i]; ++i){ ]) ; } ; } ][]; int main(){ ; i<; ++i) C[i][]=; ;…
用康托展开实现全排列(STL、itertools)
康拓展开: $X=a_n*(n-1)!+a_{n-1}*(n-2)!+\ldots +a_2*1!+a_1*0!$ X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,a为整数,并且0<=ai<i(1<=i<=n) 这个式子就是康托展开,初看同排列没什么关系,实则不然.下面通过举个例子看一下 一.用康托展开判断一个排列是第几小的 以{1,2,3}为例.我们定义排列的顺序从小到大为123,132,213,231,312,3…
HDU1043 Eight(八数码:逆向BFS打表+康托展开)题解
Eight Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28040 Accepted Submission(s): 7457 Special Judge Problem Description The 15-puzzle has been around for over 100 years; even if you don'…
P3014 [USACO11FEB]牛线Cow Line && 康托展开
康托展开 康托展开为全排列到一个自然数的映射, 空间压缩效率很高. 简单来说, 康托展开就是一个全排列在所有此序列全排列字典序中的第 \(k\) 大, 这个 \(k\) 即是次全排列的康托展开. 康托展开是这样计算的: 对于每一位, 累计除了前面部分, 字典序小于本位的排列总数, 即 LL cantor(){ LL ans = 0; for(LL i = 1;i <= num;i++){ LL cnt = 0; for(LL j = i + 1;j <= num;j++){ if(ask[j]…
洛谷P2525 Uim的情人节礼物·其之壱 [康托展开]
题目传送门 Uim的情人节礼物·其之壱 题目描述 情人节到了,Uim打算给他的后宫们准备情人节礼物.UIm一共有N(1<=N<=9)个后宫妹子(现充去死 挫骨扬灰!). 为了维护他的后宫的稳定.他通过编程,得出了一个送礼物的最佳顺序.这个我们管不着. 然而他认为,如果什么事情做得太圆满不是什么好事.于是他希望得到 原定顺序 的 前一个字典序的序列. 输入输出格式 输入格式: 第一行一个整数N 第二行N个整数,表示原定排列 输出格式: 前一个排列 输入输出样例 输入样例#1: 3 1 3 2 输…
数学【P2524】 Uim的情人节礼物·其之弐 (康托展开)
因为某人@ZAGER挖坑让我讲一下康托展开,所以发现了这个题,顺便说一下康托展开是个什么东西 题目概括 给定n与一个数列,要求求出给定数列在n的全排列中的排名(按照字典序从小到大排列) 康托展开 先放概念: 康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩. 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的. --来源于度娘 双射的概念我也不是很理解 所以直接给出康托展开的作用: 康托展开的作用是求n个数的全排列中某一个序列在所有排列中的次序(该排列次序…
hihoCoder 1312:搜索三·启发式搜索(A* + 康托展开)
题目链接 题意 中文题意 思路 做这题的前置技能学习 康托展开 这个东西我认为就是在排列组合问题上的Hash算法,可以压缩空间. A*搜索. 这里我使用了像k短路一样的做法,从最终状态倒回去预处理一遍距离,但是跑了0.8s,可能是预处理花费的时间太多了.有些人用曼哈顿距离估价,跑了0.2s. #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int N = 1e5 + 10; type…
康托展开&逆康托展开学习笔记
啊...好久没写了...可能是最后一篇学习笔记了吧 题目大意:给定序列求其在全排列中的排名&&给定排名求排列. 这就是康托展开&&逆康托展开要干的事了.下面依次介绍 一.康托展开 首先,知道它是干嘛的. 就是给定一个全排列之中的序列,求其在整个全排列中的排名. 给出式子:$k=sum_{i=1}^n(n-i)!\sum_{j=i+1}^n(a_{k,i}>a_{k,j})$ 解释一下:考虑这个序列的第i位,对于这个序列,只有前i位都小于等于它,第i位一定小于它的所有序…
LG5367 「模板」康托展开 康托展开
问题描述 LG5367 题解 康托展开公式: \[ans=1+(\sum_{i=1}^{n}{a_i})\times(n-i)!\] 用树状数组维护一下\(\sum\)里面的东西,前缀积维护后面的东西. \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; template <typename Tp> void read(Tp &x){ x=0;char ch=1;int fh; while(ch!='…
[洛谷P5367]【模板】康托展开
题目大意:给定一个$n$的排列,求它在$n$的全排列中的名次 题解:康托展开,对于一个全排列,第$i$为有$n+1-i$种选择,用变进制数表示,这一位就是$n+1-i$进制.记排列中第$[1,i)$中比第$i$位小的数个数位$a$,变进制数中第$i$位的数为$i-a-1$.可以用树状数组维护 卡点:无 C++ Code: #include <cstdio> #include <iostream> #include <algorithm> #define maxn 100…