Code POJ - 1850 (组合数学)

组合数学 ACM 和,POJ里用到组合数学的题目 立即下载
Transmitting and memorizing information is a task that requires different coding systems for the best use of the available space. A well known system is that one where a number is associated to a character sequence. It is considered that the words are made only of small characters of the English alphabet a,b,c, ..., z (26 characters). From all these words we consider only those whose letters are in lexigraphical order (each character is smaller than the next character). 

The coding system works like this: 
• The words are arranged in the increasing order of their length. 
• The words with the same length are arranged in lexicographical order (the order from the dictionary). 
• We codify these words by their numbering, starting with a, as follows: 
a - 1 
b - 2 
... 
z - 26 
ab - 27 
... 
az - 51 
bc - 52 
... 
vwxyz - 83681 
... 

Specify for a given word if it can be codified according to this coding system. For the affirmative case specify its code. 
Input
The only line contains a word. There are some constraints: 
• The word is maximum 10 letters length 
• The English alphabet has 26 characters. 
Output
The output will contain the code of the given word, or 0 if the word can not be codified.
Sample Input
bf
Sample Output
55
 
 
思路:主要想清楚,只要选出一定的字母,那么他们的顺序就一定确定下来了,接下来就是找排列数的问题了,具体解释看代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int c[27][27] = {0};//储存组合数
//打表,利用杨辉三角计算每一个组合数
void play_table(){
    int i,j;
    for(i = 0; i <= 26; i++){
        for(j = 0; j <= i; j++){
            if(j == 0 || j == i)
                c[i][j] = 1;
            else
                c[i][j] = c[i-1][j-1] + c[i-1][j];
        }
    }
    c[0][0] = 0;
    return ;
}

int main(){
    play_table();//打表
    int i,j;
    char str[13];
    scanf("%s",str);
    int len = strlen(str);//字符串长度
    for(i = 1; i < len; i++){//检查字符串是否符合要求
        if(str[i-1] >= str[i]){
            printf("0\n");
            return 0;
        }
    }
    //先求出,除掉最后一位字母的全部升序排列种类,因为除去最后一位字母,前面任意长度的种类都是在这个长度下的全部种类数
    //因为只有种类满了,才会有下一位字母嘛

    int sum = 0;
    for(i = 1; i < len; i++){
        sum += c[26][i];   //这句话做何理解:因为要求是升序的,因此一旦为选出了几个字母,那么这几个字母的顺序就确定了,所有
                           //我们要做的仅仅只是在26个字母中选出我需要的字母个数,即可所以直接c[26][i]
    }
    //下面要进行最后对总长度序列的种类计算,因为总长度序列的种类数一般不会是这个长度下总的全部种类数,所以要从头一个一个计算
    //那么思路是什么呢?
    //先从第一个字母看假设是序列是ebcdf,第一个是e,那么肯定要计算比e小的字母为开头的排列种类数,那么比e小的话有a,b,c,d
    //那么是不是就可以分别让这四个字母开头(这个字母就确定下来了),然后算它之后剩下的那一串字母的排列数,那剩下的这串的排列数怎么算?
    //首先增序,所有我们可以选的字母肯定要大于已经确定的这个开头的字母了对吧,那么为们可以选择的字母数就是26-‘开头字母’,选多少个呢,
    //那肯定是选剩下字符串的长度个啦,因为题目要求递增,所以一旦你选出来了,那么顺序一定是确定了,不需要担心我选出来的不是递增的

    for(i = 0; i < len; i++){
        char ch;
        if(i == 0)
            ch = 'a';   //如果是第一个,他的前面没有字母那么就从a开始看好了
        else
            ch = str[i-1]+1;          //否则,从那里开始看呢?肯定是当前位置的前一个字符的下一个开始看了,因为至少要比前一个大1嘛,这句话可能不好理解,举个栗子
                                      //a e k m z 这个字符串,假设当前为看到k这个字母,前一个是e,k这个位置还有谁可以开头呢,首先肯定大于e
                                      //所有要从‘e’+1为开头算起,也就是f,所以才有了str[i-1]+1,懂了吧
        while(ch <= str[i]-1){        //还是刚才的栗子,枚举开头是不是肯定要枚举到比k小的那个字母也就是j,你可能问为什么不能把k算上,因为以k为开头的
                                      //排列数不一定是所有的排列数可能排到中间字符串就停了,而他之前的一定是所有的可以用组合数直接相加,所以以k开头的要放到下一轮中判断
            sum += c['z'-ch][len-i-1]; //这里的道理前面已经解释了,注意这里要写成z-ch,字符之间运算,否则结果会错误
            ch++;
        }
    }
    printf("%d\n",sum+1);             //正如之前说的,每次找到都是他之前的种类数,所以最后加上他本身
    return 0;
}


POJ 新手题目+部分难题 基本数论+图论+组合数学 2505 2521 2538 2546 2551 2590 2593 2601 2665 2680 2739 2752 2761 2762 2777 2800 2891 2893 2992 3030 3041 3132 3159 3187 3204 3270 3277 3281 3297 3321 3414 3436 3461 3650 3663 3664 3672 3740 立即下载

相关推荐

POJ1850-Code

北大POJ1850-Code 解题报告+AC代码

Code(POJ-1850)(组合计数)

啦啦啦啦啦啦啦

Mouse_liang的博客 559

Modbus4J vs EasyModbus4J:哪个Java库更适合你的工业项目?

本文深入对比了Java领域两大Modbus通信库Modbus4J与EasyModbus4J。Modbus4J设计稳健、类型安全,适合复杂业务集成;EasyModbus4J基于Netty,在高并发场景下性能更优。文章从架构、性能、API及生产环境多维度分析,为工业物联网项目选型提供决策依据。

weixin_28475533的博客 310

LintCode 1850捡苹果

创建两个数组,存放两个人捡苹果的数据,最后从这个两个数据中取出两个不相邻的相加,与以前的比较,最后得出最大值,

xlhpgtd的博客 409

数据质量管理的一些思考

背景 在近期的项目当中,我们为客户落地实施了数据资产平台。随后,在数据平台中接入了客户子公司的一个业务系统的明细数据。客户希望在我们的数据平台上通过数据探索和数据分析,来挖掘一些业务价值和业务创新点。 当我们拿到数据开始进行一些初步探索的时候,发现导入平台的数据质量存在一定的问题:例如一些用于数据分析的关键字段的值为空、一些本应该有主从关系的数据对应不上、数据分类混乱等。这些问题直接影响到了对...

IDEAL Garden 1万+

Ubuntu20.04配置PX4环境启动或编译jmavsim 出现的错误及解决办法

错误1:ant命令未找到

Iamsonice的博客 8855

poj 1850 Code (组合数学)

题意:合法的字符串序列:由小写字母组成,每一个字符比后一个字符ASCII码要大。 将这样的字符串序列按字典序排列编码,第一小的编码为1,第二小的编码为2...依次类推 如:a->1,b->2……z->26,ab->27……vwxyz->83681. 给定一个字符串,若其合法,输出其编码,否则输出0 分析:先判断是否合法,若合法,再算其编码 计算编码即计算比该字符串小的字符串的个数,再加1即为其编码

happy_lcj 1031

YOLO11实战 第010期-基于yolo11的农业杂草作物目标检测实战文档(详细教程)

通过这条曲线,用户可以评估模型的检测能力,分析模型在不同阈值下对真实目标的检测是否全面。通过这条曲线,可以评估模型在目标检测任务中的整体性能,并找到合适的置信度阈值,以在精确率和召回率之间做出最佳平衡。PR 曲线越接近右上角,模型性能越好,曲线下方的面积越大,说明模型在不同置信度下的。),它展示了不同置信度下的召回率。条曲线都显示了随着召回率的增加,精确度略有下降的趋势,但整体上精确度保持在很高的水平。通过这条曲线,可以选择合适的置信度阈值,以优化模型的检测结果,平衡精确率和召回率。反映了分类器的准确性。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 1522

poj 3252 Round Numbers (组合数学)

题意:一个数转化成二进制之后,0的个数大于等于1的为round数, 给定一个区间[m,n],问这区间内有多少round数 分析:要求[m,n]间的的round数, 可以用[1,n+1)的个数减去[1,m)的个数,

happy_lcj 1176

图解5G HARQ-ACK反馈:从DCI解析到PUCCH发送的完整数据流

本文详细解析了5G通信系统中HARQ-ACK反馈机制的完整流程,从DCI解码到PUCCH发送的实战指南。重点介绍了HARQ-ACK码本生成、DCI关键参数解读以及PUCCH资源映射等核心技术环节,帮助工程师深入理解5G NR中的数据传输可靠性保障机制。

weixin_27722377的博客 396

advanced installer 打包Flutter的Windows程序安装包(基本打包、开机自启、定时自动检测升级、包含卸载程序)

advanced installer 打包Flutter的Windows程序安装包(基本打包、开机自启、定时自动检测升级、包含卸载程序)

qq_45634989的博客 2878

poj - 1850 - code(组合数学)

Language:DefaultCodeTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 10203 Accepted: 4902DescriptionTransmitting and memorizing information is a task that requires different coding systems fo...

sugarbliss 507

【数据集实例】CMIP6气候模式数据下载-以河东地区为例

以河东地区为例,介绍CMIP6数据下载及处理

WW、forever的博客 4931

POJ 1850 Code 【组合数学】

传送门:POJ 1850 Code Time Limit: 1000MS Memory Limit: 30000K Problem Description Transmitting and memorizing information is a task that requires different coding systems for the best use of the avail...

Waiting For You 192

【深度学习驱动流体力学】Python流体力学Ansys Fluent

PyFluent 是一个将 Python 编程语言与 Ansys Fluent 流体动力学 (CFD) 仿真软件集成的工具。它允许用户通过 Python 脚本来控制和自动化 Fluent 中的仿真任务,实现从预处理、求解到后处理的全流程控制。PyFluent 结合了 Python 的灵活性和 Fluent 的强大功能,提供了一种高效且灵活的 CFD 仿真方法。PyFluent 是一个强大而灵活的工具,使用户能够通过 Python 脚本全面利用 Ansys Fluent 的功能。

源代码杀手的博客 3123

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[poj 1850] Code 组合数学

Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9102 Accepted: 4346Description Transmitting and memorizing information is a task that requires different coding systems for t

ATOD 639

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

poj1850 Code 组合数学

话说这题我所有的极限值都测了 还是wa 求大神解。。。 题意: 给一串由26个小写字母组成的字母序递增的的字符串(l a - 1  b - 2  ...  z - 26  ab - 27  ...  az - 51  bc - 52  ...  vwxyz - 83681  ...  方法: 先预处理,算出26以内的C[i][j],算出每一个位数的

Unknown 1087

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

POJ-1850-Code-组合数学

http://poj.org/problem?id=1850 本题其实并不难。。。自己给自己吓到了。。看了复杂的题解。。。 和3252的思路一样,要求当前字符串的位置,设当前长度为x 1、先求 len 2、再求len==x,比当前字符串小的数量 显然,要求长度为k,的字符串,满足严格增序的种类,就是 C(26,k)【直接从a,b,c.....z选k个】 把 长度

缺氧 708

POJ 1850 Code 组合数学

Description Transmitting and memorizing information is a task that requires different coding systems for the best use of the available space. A well known system is that one where a number is ...

aocan6909的博客 146

Code POJ 1850 组合数学

Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7193 Accepted: 3358 Description Transmitting and memorizing information is a task that requires different

风华绝代 761

【组合数学】POJ_1850_Code

//POJ_1850 //比如说求比358小的由1-9的数字组成的数(0不算)//而且后面一个数一定比前一个数大,//而且不能重复,//类似于这个意思,这题是字母,当做数字范围1-26就行 //C(9,2)+C(9,1)+C(7,2)+C(8,2)+C(6,2)+...不想写了,应该没算错 //358 的话百位相等时,十位只能>=4,要满足比前一位数大, //两位数和一位数 百位不相等时,如果选2

yiluuuuu的博客 589

Code POJ - 1850 组合数学

  题意 :字符串从a=1 b=2 c=3....z=26 ab=27开始编号 每个都是升序的 给出字符串问是几号   思路:主要是要看n位字符串有多少个 这里需要用组合数学的思想 组合数用杨辉三角形递推出   参考:https://blog.youkuaiyun.com/lyy289065406/article/details/6648492 ...

azmkinbug41973327的博客 159

POJ 1850:Code 组合数学

Code Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 8710   Accepted: 4141 Description Transmitting and memorizing information is a task that requires diff

714

POJ 1850 Code (组合数学)

Description Transmitting and memorizing information is a task that requires different coding systems for the best use of the available space. A well known system is that one where a number is associa

小坏蛋_千千 747

POJ 1850-Code(组合数学)

Code Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 8505   Accepted: 4030 Description Transmitting and memorizing information is a task that requires differ

Rocky0429 1827
上一篇: Magic Powder - 2 CodeForces - 670D2 (二分)
下一篇: Good Luck in CET-4 Everybody! HDU - 1847 (巴氏博弈)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值