描述

现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?

输入
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列;
输出
输出一个整数m,占一行,m表示排列是第几位;
样例输入
3
abcdefghijkl
hgebkflacdji
gfkedhjblcia
样例输出
1
302715242
260726926
来源
[苗栋栋]原创
上传者
苗栋栋

做这道题,请尊重你的第一想法,对,没错。就是按每一位来计算小于它的个数,然后相加。

比如·第一位是3 1 2 ,然后·就有比第一位3小的有2个 ,则有2*2!就是 123 132    213 231.......

按照这种思维有一个科学方法:康托展开

先看一下它的公式:X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 试试看,能看懂吗??

X为在这个排列之前的个数,最后别忘了加1哦

n为数组的长度;

a[n]是比第一位数小的个数,注意这里从0开始。(n-1)就不用解释了吧

理解了就好做了,

最后可以先把1~12的竭诚用数组存起来,然后对于每一位i,有f[12-i]*t        t相当于a[i],比第i位小的个数;

参考链接:http://blog.csdn.net/zhongkeli/article/details/6966805

代码如下:

#include<stdio.h>
char s[15];
int n;
int main()
{int f[15];         //存阶乘;f[1] = 1;for(int i = 2; i <= 12; i++){f[i] = f[i - 1] * i;  //计算相应的阶乘}scanf("%d",&n);while(n--){int sum = 0;scanf("%s",s + 1);     //这里s+1比较好,第一位是是s[1];for(int i = 1; i <= 12; i++){int t = 0;       //统计i后面的比,,,,,,自己看吧for(int j = i + 1; j <= 12; j++){if(s[i] > s[j]) t++;}sum += f[12 - i] * t;         //相当于t=a[n]*(n-1)+.........    n-1==f[12-i]   t==a[n];    }printf("%d\n",sum+1);          //别忘了加1}return 0;
}

转载于:https://www.cnblogs.com/zitian246/p/9123560.html

(康托展开解释)+ NYOJ 139 我排第几个相关推荐

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

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

  2. NYOJ 139 我排第几个?

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

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

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

  4. NOY 139 康托展开

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

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

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

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

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

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

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

  8. 洛谷P1088.火星人【模拟/搜索/康托展开】

    洛谷P1088.火星人[模拟/搜索/康托展开] 题干 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题意 思路一--模拟 分析 上代码 思路二--搜索 分析 上代码 思路三--变进制数与康托 ...

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

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

最新文章

  1. 计算机教师个人总结及自评,教师个人自评总结
  2. (C++)用指针实现两数交换函数swap()的两种方法
  3. android京东秒杀倒计时,js实现京东秒杀倒计时功能
  4. 【js与jquery】三级联动菜单的制作
  5. 音视频技术开发周刊 | 197
  6. npoi 设定视图为分页预览_按班级分页打印,只要两步就行,不需要再筛选复制打印了...
  7. 一文读懂vuex4源码,原来provide/inject就是妙用了原型链?
  8. elasticsearch 5.1 问题 ubuntu
  9. cv岗工作做什么_职场速递:我应该做什么工作?
  10. VS2015+cmake3.8+opencv3.2+opencv-contrib3.2编译及配置步骤
  11. Cisco和H3C的两种不同动态×××解决方案
  12. php for 循环 try_重新学习php基础之循环遍历(for循环和while循环)(六)
  13. 通过IF({1,0}和VLOOKUP函数实现Excel的双条件多条件查找的方法
  14. dnf手游体验服显示无法连接服务器,《DNF手游》体验服服务器人数上限怎么办 体验服服务器人数上限解决办法...
  15. JS生成uuid的四种方法
  16. WMI的讲解(是什么,做什么,为什么)
  17. vnc远程软件,盘点六款你值得拥有的vnc远程软件
  18. 有道云笔记不同步_有道云笔记同步失败解决方法
  19. 读《互联网:一部概念史》有感
  20. PyTorch系列 | correct += (predicted == labels).sum().item()的理解

热门文章

  1. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
  2. 【Docker】Docker的三大核心组件
  3. 2022-2028年中国遇水膨胀橡胶行业市场研究及前瞻分析报告
  4. 【Sql Server】数据库的3大服务
  5. 5 分钟入门 Google 最强NLP模型:BERT
  6. SQL函数Group_concat用法
  7. ARM的突破:超级计算机和Mac
  8. 汽车车灯灯具系统(下)
  9. 操作系统常用词典(一)
  10. api.php t.cn,PHP通过调用新浪API生成t.cn格式短网址链接的方法详解