关于康拓展开:

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

以下称第x个全排列是都是指由小到大的顺序。

公式

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

其中,a[i]为整数,并且0 <= a[i] < i, 1 <= i <= n。

a[i]的意义参见举例中的解释部分

举例

例如,3 5 7 4 1 2 9 6 8 展开为 98884。因为X = 2*8! + 3*7! + 4*6! + 2*5! + 0*4! + 0*3! + 2*2! + 0*1! + 0*0! = 98884.

解释:

排列的第一位是3,比3小的数有两个,以这样的数开始的排列有8!个,因此第一项为2*8!

排列的第二位是5,比5小的数有1、2、3、4,由于3已经出现,因此共有3个比5小的数,这样的排列有7!个,因此第二项为3*7!

以此类推,直至0*0!

因此,3 5 7 4 1 2 9 6 8是第98884小的排列。

维基百科上的介绍:http://zh.wikipedia.org/zh/%E5%BA%B7%E6%89%98%E5%B1%95%E5%BC%80

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=139

本题代码如下:

#include <cstdio>const int f[13] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600};int kt(char s[],int n) //n表示该排列有n个数
{int sum = 0;for(int i = 0; i < n; i++){int temp = 0;for(int j = i + 1; j < n; j++)if(s[j] < s[i])temp ++;sum += f[n - 1 - i] * temp; //f[n]表示n的阶乘}return sum + 1;
}int main()
{int n;char s[13];scanf("%d", &n);while(n--) {scanf("%s", s);printf("%d\n", kt(s, 12));}return 0;
}

NYIST 139 我排第几个(康托展开)相关推荐

  1. java实现排程算法_康托展开算法和逆康托展开算法[Java实现]

    基于这篇介绍我实现了基于Java的算法 都能看懂的康托展开_ltrbless的博客-CSDN博客​blog.csdn.net 条件 一个数组:[1, 2, 3, 4, 5] 康托展开算法 找出 524 ...

  2. 康托展开式---我排第几+逆康托展开

    之前一直不想看这个康托展开定理因为真的很不理解,但是现在还是勇敢的面对了~  {1,2,3,4,...,n}表示1,2,3,...,n的排列如 {1,2,3} 按从小到大排列一共6个.123 132 ...

  3. NYOJ 139 我排第几个(康托展开)

      我排第几个 时间限制:1000ms  |  内存限制:65535KB 难度:3 描述 现在有"abcdefghijkl"12个字符,将其所有的排列中按字典序排列,给出任 ...

  4. (康托展开解释)+ NYOJ 139 我排第几个

    描述 现在有"abcdefghijkl"12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的? 输入 第一行有一个整数n(0<n& ...

  5. NOY 139 康托展开

    题目链接 NOY 139 我排第几个 现在有"abcdefghijkl"12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小>的? ...

  6. HDU 1043 Eight(双向BFS+康托展开)

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 题意:给出一个八数码,求出到达指定状态的路径. 思路:路径寻找问题.在这道题里用到的知识点挺多的.第一次用 ...

  7. 转换地图 (康托展开+预处理+BFS)

    Problem Description 在小白成功的通过了第一轮面试后,他来到了第二轮面试.面试的题目有点难度了,为了考核你的思维能量,面试官给你一副(2x4)的初态地图,然后在给你一副(2x4)的终 ...

  8. [总结] 康托展开及其逆运算

    这里先贴一道例题 我们先科普一下康托展开 定义: X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! ai为整数,并且0<=ai<i ...

  9. 康托展开与八数码问题

    康托展开的公式是 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,ai为当前未出现的元素中是排在第几个(从0开始). 用康托展开将排列 ...

最新文章

  1. HDU2031 进制转换【进制】
  2. 嵩天-Python语言程序设计程序题--第八周:程序设计方法学
  3. 第二季4:HI_S32 SAMPLE_VENC_1080P_CLASSIC(HI_VOID)函数的分析
  4. 华为汪涛:走向智能世界2030,无线网络未来十年十大产业趋势
  5. 【华为云技术分享】从部署和运维说说DLI(1)
  6. 写给 Python 开发者的 10 条机器学习建议
  7. 权限组件之录入获取登入用户的所有权限
  8. 数据结构排序算法思路总结
  9. 【清橙A1339】JZPLCM(顾昱洲) (树状数组)
  10. ROS学习(开篇)Ubuntu16.04安装ROS Kinetic详细教程
  11. Android S关闭定位开关后,定位权限被AppOps限制。
  12. tplink查看上网记录_tp-link路由器如何查看连接人数 tp-link路由器查看连接人数方法【步骤】...
  13. python中如何打开文件选择框
  14. 区块链人才能力评价测试机构亮相
  15. python分层抽样_基于列的sklearn分层抽样
  16. 爬虫爬取快代理网站动态IP
  17. 安卓开发的一些uuid,imei,meid,imsi,clientid,uuid
  18. 博士 关于如何做科研?如何阅读文章?如何写综述?等问题……
  19. 网络七层模型(iso)
  20. 基于springboot的家装平台设计与实现

热门文章

  1. Spring Retry 请求重试指南
  2. 全面理解java中的构造方法以及this关键字的用法(超详细)
  3. 《网页设计与欣赏》大学选修课论文
  4. 【定时同步系列8】QPSK基带调制+Gardener定时误差检测+解调误码率曲线之MATLAB并行仿真姊妹篇一
  5. “The entitlements specified in your application’s Code Signing Entitlements file do not match those
  6. Linux命令之uniq命令
  7. 阿里天池:Task 04:Python数据分析:从0完成一个数据分析实战(第4部分)
  8. 10月18日晚思想汇报
  9. POI生成excel文件以及预览文件功能
  10. github在浏览器直接阅读代码技巧(直接在github后面加上1s)