因为某人@ZAGER挖坑让我讲一下康托展开,所以发现了这个题,顺便说一下康托展开是个什么东西

题目概括

给定n与一个数列,要求求出给定数列在n的全排列中的排名(按照字典序从小到大排列)

康托展开

先放概念:

康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。

--来源于度娘

双射的概念我也不是很理解

所以直接给出康托展开的作用:

康托展开的作用是求n个数的全排列中某一个序列在所有排列中的次序(该排列次序(亦称之为排名)以字典序从小到大排序)

还是不理解?

栗子:

求:在n=3的全排列中,{1,3,2}排第几位。

可以写出n=3的全排列 {1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}

(在这里我们按照字典序从小到大排序)

所以容易看出{1,3,2} Rank 2

如果还是不理解请打开上面的'度娘'↑,里面有详细解释

康托展开的公式:

\[X=a[n] * [(n-1)!] +a[n-1]*[(n-2)!]+....+a[1] * [0!]。
\]

其中X代表当前排列小的排列的个数,

a[i]代表当前排列里从i位置右侧比i位置的数小的数的个数。

详细解释;

   在n=5的全排列中,计算{3,4,1,5,2}的康托展开值。

   首位是3,则小于3的数有两个,为1和2,a[5]=2,则首位小于3的所有排列组合为a[5]*(5-1)!

   第二位是4,则小于4的数有两个,为1和2,注意这里3并不能算,因为3已经在第一位,所以其实计算的是在第二位之后小于4的个数。因此a[4]=2。

   第三位是1,则在其之后小于1的数有0个,所以a[3]=0。

   第四位是5,则在其之后小于5的数有1个,为2,所以a[2]=1。

   最后一位就不用计算啦,因为在它之后已经没有数了,所以a[1]固定为0.

 根据公式:
rank=2*(4!)+2*(3!)+0*(2!)+1*(1!)+0*(0!)=61. 所以比{3,4,1,5,2}小的组合有61个,即{3,4,1,5,2}排名62。

以上内容来自度娘+个人认为.

所以就这么多了,还有一个逆康托展开,没有怎么学,网络上讲这个的还是不少的,想继续学的可以自行找寻度娘的~

---------------代码--------------

#include<bits/stdc++.h>
#define IL inline
#define RI register int
const int fac[]={1,1,2,6,24,120,720,5040,40320,362880};//阶乘
char s[108];
int n;
IL int Contor(char s[],int n)
{
int ans=0;
for(RI i=0;i<n;i++)
{
//std::cout<<ans<<std::endl;
int smaller=0;
for(RI j= i+1 ;j<n;j++)
{
if(s[i] > s[j])smaller++;
}
ans += smaller*fac[n-i-1];
}
return ans+1;
}
int main()
{
std::cin>>n;
std::cin>>s;
std::cout<<Contor(s,n);
}

数学【P2524】 Uim的情人节礼物·其之弐 (康托展开)的更多相关文章

  1. 洛谷P2525 Uim的情人节礼物·其之壱 [康托展开]

    题目传送门 Uim的情人节礼物·其之壱 题目描述 情人节到了,Uim打算给他的后宫们准备情人节礼物.UIm一共有N(1<=N<=9)个后宫妹子(现充去死 挫骨扬灰!). 为了维护他的后宫的 ...

  2. luogu P2525 Uim的情人节礼物 其之壱

    LINK:Uim的情人节礼物·其之壱 壱 古代通壹 常在日文中出现. 完全可以使用STL -->prev_permutation来解决. 不过我简单了解了一下康托展开. 这是一个一个排列对应一个 ...

  3. 准备情人节礼物比写代码难?来看看IT直男给女友们的礼物

    今天是情人节,据说IT直男在每个这样弥漫着恋爱气息的日子里都能把礼物送成"辣眼睛"现场,为了反(zheng)驳(shi)这个观点,小编特意走访了网易云的架构师.工程师.产品经理.程 ...

  4. 【情人节礼物】纯js脚本打造精美3D玫瑰

    情人节就要来临了,这是用代码做出的玫瑰花,这才是程序员送给女友的最好情人节礼物...(提示:在不同浏览器下观看效果.速度会有很大的不同) 代码如下: <!doctype html> < ...

  5. bzoj5015 [Snoi2017]礼物 矩阵快速幂+二项式展开

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5015 题解 设 \(f_i\) 表示第 \(i\) 个朋友的礼物,\(s_i\) 表示从 \( ...

  6. BZOJ3301 P2524 UVA11525 算法解释康托展开

    这三个题的代码分别对应第二个第一个第三个 在刘汝佳蓝书上我遇到了这个康托展开题. 当时去了解了一下,发现很有意思 百度上的康托展开定义 原理介绍 编辑 康托展开运算 其中, 为整数,并且 . 的意义为 ...

  7. 【数学】康托展开 && 康托逆展开

    (7.15)康托展开,就是把全排列转化为唯一对应自然数的算法.它可以建立1 - n的全排列与[1, n!]之间的自然数的双向映射. 1.康托展开: 尽管我并不清楚康托展开的原理何在,这个算法的过程还是 ...

  8. 康拓展开 & 逆康拓展开 知识总结(树状数组优化)

    康拓展开 : 康拓展开,难道他是要飞翔吗?哈哈,当然不是了,康拓具体是哪位大叔,我也不清楚,重要的是 我们需要用到它后面的展开,提到展开,与数学相关的,肯定是一个式子或者一个数进行分解,即 展开. 到 ...

  9. 一些数学上的概念理解(持续更新qwq)

    致敬百度百科qwq 本文摘自百度百科,只是对于信竞范围内的知识做一个小总结qwq,持续更新ing··· 满射: 如果每个可能的像至少有一个变量映射其上(即像集合B中的每个元素在A中都有一个或一个以上的 ...

随机推荐

  1. 三 APPIUM GUI讲解(Windows版)

    本文本转自:http://www.cnblogs.com/sundalian/p/5629386.html APPIUM GUI讲解(Windows版)   Windows版本的APPIUM GUI有 ...

  2. Kotlin中when表达式的使用:超强的switch(KAD 13)

    作者:Antonio Leiva 时间:Feb 23, 2017 原文链接:https://antonioleiva.com/when-expression-kotlin/ 在Java(特别是Java ...

  3. ExtJS Ext.MessageBox.alert()弹出对话框详解

    Ext.MessageBox是一个工具类,他继承自Obiect对象,用来生成各种风格的信息提示对话框,Ext.Msg是该类的别名,使用Ext.MessageBox和用Ext.Msg效果是一样的,而后者 ...

  4. URAL 1934 spfa算法

    D - Black Spot Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  5. 【Luogu】P2465山贼集团(树形状压DP)

    题目链接 写了个70分暴力还挂了,第一遍提交只拿了十分……海星 首先建虚拟节点多叉树转成二叉,然后子集枚举DP 设g[x][i]是以x为根的子树内山贼集合i,x啥都不选也没贡献的时候的最大价值 f[x ...

  6. [洛谷P3701]「伪模板」主席树

    题目大意:太暴力了,就不写了,看这儿 题解:对于每个$byx$的人,从源点向人连边,容量为此人的寿命. 对于每个手气君的人,从人向汇点连边,容量为此人的寿命. 对于每个$byx$的人与手气君的人,如果 ...

  7. 03 Java 修饰符

    Java 修饰符主要分为两类: 访问修饰符 非访问修饰符 访问修饰符 public,对所有类可见 protected,对同一包内的类和子类可见 default,同一个包内的类可见 private,对当 ...

  8. freemarker的简单入门程序

    本文主要介绍了freemarker的常用标签<#list>   <#import>  <#assign>  <#if> <#else> &l ...

  9. Windows 2008 R2无法打补丁

    遇到了Windows 2008 R2无法打补丁,并且控制台上的feature和roles都是error 可下载这个补丁进行修复: System Update Readiness Tool for Wi ...

  10. 从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式

    如何正确使用NIO来构架网络服务器一直是最近思考的一个问题,于是乎分析了一下Jetty.Tomcat和Mina有关NIO的源码,发现大伙都基于类似的方式,我感觉这应该算是NIO构架网络服务器的经典模式 ...