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

【补充:脑电绘图教程 2】如何手动去除ICA伪迹分量

ICA可以将脑电信号分解为多个IC分量,由每个分量的平均功率地形图可以看出哪些分量属于伪迹,去除伪迹分量后,即可得到“干净”的脑电信号。本教程主要总结如何人工识别出ICA伪迹分量,不涉及ICA的原理讲解。本教程的主要知识来源是ICLabel官网ICLabel致力于自动识别IC分量属于哪种伪迹,并标记伪迹占比,可以在eeglabel中很方便地使用。ICLabel给出了几种常见伪迹的特点,本教程主要是根据ICLabel给出伪迹特点,对自己的数据集手动去除伪迹,以更深入了解自己数据集的质量和伪迹特点。

qq_40735196的博客 4230

LintCode 1850捡苹果

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

xlhpgtd的博客 409

YOLOv8n行人检测实战:从数据集准备到模型训练

本文详细介绍了使用YOLOv8n进行行人检测的完整流程。首先阐述了YOLOv8的优势:高速推理(300+FPS)、更高精度、易用性和轻量化(仅6MB)。接着通过Docker搭建GPU训练环境,配置32GB共享内存避免数据加载问题,并安装必要的框架和OpenCV组件。数据集采用COCO2017标注格式,包含归一化坐标的YOLO标签文件。通过可视化脚本验证标注准确性后,提出多数据集融合训练策略以增强模型泛化能力。最后使用Ultralytics框架启动训练,展现了从环境搭建到模型训练的完整技术路径。该方案兼顾检测

Hi20240217的博客 1089

思科模拟器实战:MQTT协议实现物联网设备通信全流程解析

本文详细解析了如何在思科模拟器中利用MQTT协议实现物联网设备通信的全流程。通过搭建网络拓扑、配置MQTT Broker与客户端,并编写发布/订阅逻辑,手把手指导读者完成一个“开关控制电灯”的经典物联网场景实验,帮助零成本掌握物联网通信核心。

weixin_29294975的博客 381

poj 1850 Code (组合数学)

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

happy_lcj 1031

VMD-CNN-BiLSTM-Attention预测模型 —— 数学模型介绍&完整实例代码

想解决电力负荷预测中的非线性、非平稳难题?这篇博客介绍了一种创新混合模型,结合变分模态分解(VMD)和CNN-BiLSTM-Attention深度学习架构,实现超高精度预测! ✨ 核心亮点: ✅ VMD分解:有效分离复杂负荷信号,提取关键频率特征 ✅ 混合深度学习:CNN捕捉局部模式 + BiLSTM学习长时序依赖 + 注意力机制聚焦关键时段 ✅ 端到端优化:从数据预处理(滑动窗口、归一化)到模型训练(MSE损失+Adam优化),完整流程公开! ✅ 工业级评估:提供MSE、MAE、MAPE、R²多指标验证

qq_42924330的博客 1652

poj 3252 Round Numbers (组合数学)

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

happy_lcj 1176

定位分析RCU stall问题

在编译内核时打开或者在启动参数中增加这样统计信息是在采样周期中收集的。其中number行分别是发生stalled的cpu上的硬中断,软中断,和上下文的切换次数cputime行的前三列分别是硬中断,软中断和任务消耗的cpu时间,单位为ms.最后一个数字是统计的周期时间(ms).因为用户态的任务通常不会引起RCU CPU stalls,所以任务通常是内核任务,这也是为什么只统计system cpu的原因.

happyAnger6的专栏 1993

【异常】OpenClaw调用火山引擎大模型提示词 Agent failed before reply: All models failed (6): volcengine/kimi-k2-5-26

摘要: 本文针对OpenClaw调用火山引擎大模型服务时触发的全量熔断报错(All models failed)提供全链路排查方案。报错核心为服务熔断(cooldown)和模型不可用(model_not_found),主要源于账号权限、API凭证失效或模型标识错误。解决方案按优先级分步实施:1)校验账号状态与AK/SK有效性;2)核对官方模型标识;3)重启服务解除熔断;4)修复配置文件;5)通过原生API测试定位网络或服务端问题。日志分析(openclaw logs)可快速识别HTTP状态码(如401/40

奶爸的编程之路,也就一周冷个三天 837

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

qwen2vl ValueError: Image features and image tokens do not match: tokens: 568, features 600

本文介绍了一个用于计算多模态数据集中样本token数量的Python工具,特别针对包含文本和图像的Qwen2-VL模型数据集。

q742971636的博客 1012

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爬虫实战:高效爬取中国专利数据库的完整指南

在当今信息爆炸的时代,专利数据作为技术创新的重要指标,对企业研发、市场分析和学术研究都具有极高价值。中国作为全球专利申请量最大的国家,其专利数据库包含了海量的技术创新信息。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的中国专利数据库爬虫系统。中国专利数据库主要由国家知识产权局(CNIPA)维护,包含发明专利、实用新型专利和外观设计专利三大类。截至2023年,中国专利数据库已收录超过400万件发明专利和300万件实用新型专利。

2201_76125261的博客 1571

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

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、付费专栏及课程。

余额充值