字典序问题。在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz等字符串都是升序字符串。现在对字母表中产生的所有长度不超过6的升序字符串,计算它在字典中的编码。

1
2
3
ab
ac
a
b
c
27
28

样例输入:

2

a

b

样例输出:

1

2

思路:比较麻烦的一道题,需要注意的是字符串是升序的,比如az下一个是bc而不是ba,,,,
拿dgh来说一下思路,
首先判断字符串长度为3,先算长度为1和2的所有情况,即从26个字母中选1个或两个字母,因为是升序,即
sum=C(26,1)+C(26,2);
       之后再看字符串的第一个字符,为'd',之前有以a,b,c开头的长度为3的字符串,以a开头,后边2位需要在25个字母中选择(除了a),以b开头的后2位需要在24个字母中选择(除了a,b),以c开头的在23个字母(除了a,,b,c)中选择,,
即sum+=(C(25,2)+C(24,2)+C(23,2));
      之后再看下一个字母'g',d与g之间有e,f,需要算以de开头以及以df开头的所有情况,即sum+=(C(21,1)+C(20,1)),
      最后再加上h-'a'+1;
     以这种思路代码:
#include<stdio.h>
#include<string.h>
int f(int m,int n)
{int sum=1,sum1=1;int i;for(i=1;i<=n;i++)sum*=i;for(i=m;i>m-n;i--)sum1*=i;return sum1/sum;
}
int main()
{int t;int sum;int i,j,len;char s[10];int a[10];scanf("%d",&t);while(t--){getchar();sum=1;scanf("%s",s);len=strlen(s);for(i=1;i<len;i++){sum+=f(26,i);           //小于字符串长度的所有情况}for(i=0;i<len;i++){a[i]=s[i]-96;           //计算每个字符从a开始的数值// printf("%d ",a[i]);}//printf("%d\n",f(26,2));int temp=1;for(i=len;i>0;i--){                          for(j=temp;j<a[len-i];j++){sum+=f(26-j,i-1);    //依次扫描字符,计算所有情况}temp=a[len-i]+1;}printf("%d\n",sum);}return 0;
}

字典序问题(排列组合)相关推荐

  1. 排列组合 A(n, m) 字典序

    针对数字序列[1, 2, 3, 4, 5], 常见的排列组合情况有: 1. 求n个数的全排列,要求各个排列升序.[1,2,3,4,5] ... [5,4,3,2,1] 2. 求A(m, n),结果为升 ...

  2. 蓝桥杯——说好的进阶之去反复元素的排列组合

    将待排列(组合)的数组,先分别统计出种类和个数,然后进行避免反复的排列(组合). /* 1,1,2,3的排列组合 去反复* (借此复习排列组合)* * 1:2 2个1* 2:1 1个2* 3:1 1个 ...

  3. 组合数学之排列组合(Permutations and Combinations)(四种情况)

    加减乘除四个原理不再赘述.(即使小学生都会的原理也能出些大学生不会的题目) 1集合的排列(Pertutations of Sets)(无重有序)(无重复有序) 设r为正整数,把n个元素的集合S的一个r ...

  4. 秒杀排列组合(上)————排列篇

    首先为什么要写排列组合?因为排列组合在数学中占有重要的地位,其与概率论也有密切关系:并且排列组合问题在求职的笔试,面试出现的概率特别高,而我在网上又没有搜到比较全面题型的文章:同时,我觉得编写排列组合 ...

  5. 算法 64式 17、排列组合算法整理

    1算法思想 排列组合 1.1含义 排列: 含义:从元素列表中取出指定个数的元素进行排序 公式:从n个不同元素中取出m个元素的排列个数=n!/(n-m)! 组合: 含义:从元素列表中取出指定个数的元素, ...

  6. [学习C++ ]C++ STL 全排列函数详解(排列组合与匹配算法)--1

    一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列.如果这组数有n个,那么全排列数为n!个. 比如a ...

  7. 排列 组合 算法(一)

    排列组合算法 我们都知道排列与组合的个数可以利用公式很容易的求出来,但是要是把这些排列组合的序列一一输出怎么办呢? 下面结合<组合数学>(第四版)卢开澄卢华明编著,好好总结排列与组合的算法 ...

  8. 算法题-排列组合问题

    27.Algorithm Gossip: 排列组合 说明 将一组数字.字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:1 2 3.1 3 2.2 1 3.2 3 1.3 ...

  9. 组合数学--排列组合

    组合数学--排列组合 1. 概述 1.1 应用 1.2 三大问题 2. 排列组合 2.1 两大法则 2.2 排列 3. 放球模型 4. 模型转换 5. 线性方程的解 5.1 若干等式及其组合意义 6. ...

  10. python多个列表排列组合_多个列表的排列组合(笛卡儿积) | 迭代实现

    在西电开源社区逛论坛时候,发现下面的排列组合问题有一个高效的迭代方式实现. 如何从 ['ABC', '12'] 得到 A1 A2 B1 B2 C1 C2 然后推广到 ['abcd', '98h40ui ...

最新文章

  1. 如何巧用方位角和倾斜角增大光伏电站的发电量?
  2. Linux 最常用命令:简单易学,但能解决 95% 以上的问题
  3. 【杂谈】为什么邀请大家加入硬核知识星球有三AI
  4. android 区分系统应用,Android区分系统应用和安装应用
  5. 删除vue打包大小限制_如何优化 Vue 祖传代码
  6. N的阶乘的长度 V2(斯特林近似) 51Nod - 1130
  7. 关于下一代IM服务器的一点想法
  8. 安装python性能检测工具line_profiler
  9. rabbitmq多个消费者_为什么要选择RabbitMQ,RabbitMQ简介,各种MQ选型对比
  10. 实用网站、软件、App分享
  11. Android计算器简单实现及代码分析
  12. Java实现视频加密及播放
  13. matlab点在直线上运动,求助如何用matlab取出直线上的点
  14. 服务器中tomcat内存溢出配置文件修改
  15. %02x与%2x 之间的区别
  16. throw Exception
  17. upnp是不是虚拟服务器,360路由器虚拟服务器设置(360路由器开启upnp功能)
  18. intelx86为何从0xFFFF0处执行
  19. Latex罗马数字(一)
  20. Base58算法加密解密(Python实现)

热门文章

  1. Linux防火墙配置
  2. 人工智障与深度学渣之问题集锦:ValueError: Shape must be rank 4 but is rank 1 for 'Conv2D' with input shapes。。。
  3. 矿大计算机学院国奖公示,中国矿大学子在2020年中国大学生计算机设计大赛省级赛中荣获特等奖...
  4. Misc-登机牌[i春秋][150pt]
  5. html怎么加漂浮物,仿天涯底部固定漂浮导航
  6. mybatis或mybatis-plus查询时忽略大小写方法,不用写xml文件
  7. 三菱PLC FX5U与FX5U 直间modbus tcp 通讯
  8. 计算光学和计算机科学与技术,光学计算会是未来发展方向吗?
  9. MPAndroidChart蜘蛛网雷达图
  10. Cubase v5.1.1 macOS (移植版)音乐制作软件下载