【洛谷 P1246】编码 题解(深度优先搜索+集合+暴力枚举)

编码

题目描述

编码工作常被运用于密文或压缩传输。这里我们用一种最简单的编码方式进行编码:把一些有规律的单词编成数字。

字母表中共有 26 26 26 个字母 a , b , c , ⋯ , z \mathtt{a,b,c,\cdots,z} a,b,c,,z,这些特殊的单词长度不超过 6 6 6 且字母按升序排列。把所有这样的单词放在一起,按字典顺序排列,一个单词的编码就对应着它在字典中的位置。

例如:

  • a → 1 \verb!a! \to 1 a1
  • b → 2 \verb!b! \to 2 b2
  • z → 26 \verb!z! \to 26 z26
  • ab → 27 \verb!ab! \to 27 ab27
  • ac → 28 \verb!ac! \to 28 ac28

你的任务就是对于所给的单词,求出它的编码。

输入格式

仅一行,被编码的单词。

输出格式

仅一行,对应的编码。如果单词不在字母表中,输出 0 0 0

样例 #1

样例输入 #1

ab

样例输出 #1

27

思路

首先从输入中读取需要编码的单词,并获取其长度。然后,初始化一个字符为’a’到’z’的循环,对每一个字符,都生成一个只包含该字符的字符串,然后以该字符串为起始,进行深度优先搜索(DFS)。

在进行DFS时,首先检查当前字符串的长度,如果长度超过了输入单词的长度,就返回,不再继续搜索。否则,从当前字符串的最后一个字符的下一个字符开始,生成新的字符串并进行DFS。然后将生成的字符串插入到对应长度的集合中。

在DFS结束后,从长度为1的集合开始,依次遍历每个集合中的字符串,同时维护一个计数器。当遍历到的字符串等于输入的单词时,输出计数器的值并结束程序。如果遍历完所有集合都没有找到输入的单词,就输出0。

注意

如果单词不在字母表中,输出 0 0 0


AC代码

#include <algorithm>
#include <cstring>
#include <iostream>
#include <set>
#include <string>
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;ll len;
string s;
set<string> s1[10];void dfs(string x) {int l = x.length();if (l > len) {return;}for (char i = x.back() + 1; i <= 'z'; i++) {dfs(x + i);}s1[l].insert(x);//	cout << x << "\n";
}int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> s;len = s.length();for (char i = 'a'; i <= 'z'; i++) {string t;t += i;dfs(t);}//	cout << s1.size() << endl;ll ans = 0;for (int i = 1; i <= len; i++) {for (const auto j : s1[i]) {ans++;// cout << j << "\n";if (j == s) {cout << ans << "\n";return 0;}}}// 如果单词不在字母表中,输出 0。cout << 0 << "\n";return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用WinSCP通过固定公网TCP地址实现远程连接内网设备传输文件

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…

VIN车辆识别代码查询API接口是什么

VIN车辆识别代码查询API接口又叫VIN码查询接口、VIN码识别接口、车辆VIN码解析接口、车架号查询车辆信息接口&#xff0c;通过输入车辆VIN识别码&#xff08;车架号&#xff09;获取车辆参数信息&#xff0c;返回车辆品牌、车型、油耗、车身形式、排量等等。那么这个接口如何对…

什么是交叉连接:全面概述

交叉连接是数据中心上下文中使用的术语&#xff0c;指的是在两个单独的硬件单元之间建立直接链接所需的物理电缆和连接。这些连接在促进数据中心内各个组件之间的高效和安全通信方面发挥着至关重要的作用。通过在硬件单元之间创建专用网络链接&#xff0c;交叉连接消除了对基于…

前端的未来已然到来

随着整个软件行业正逐渐转向以打包、托管与抽象解决方案为主体的新形态&#xff0c;后端与基础设施带来的麻烦正越来越少&#xff0c;而立足堆栈顶部的前端工程师开始成为施展空间最大的时代宠儿。甚至不只是他们&#xff0c;如今无论是前端、后端还是运维开发者&#xff0c;他…

Meta因露骨AI图片陷入困境

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

硬件?、嘉立创EDA画PCB规则设计

1、打开规则设计 设置单位为mil 点击全部 将安全距离设置为8mil&#xff0c;这个8mil是目前很多生产PCB的工厂可以做的&#xff0c;如果距离设置的更小也就是性能要求更高&#xff0c;相应的生产成本也高元件到元件的距离设置为20mil 2、设置导线的宽度规则&#xff0c;可以对v…

敏捷——登录校验/管理事项/Javaweb/后端/Springboot

勋的要求 1 登录后 后端返回一个token 2 数据库 用户表 事项表 用户表&#xff1a;用户名 密码 用户标识&#xff08;id&#xff09; 1 zhangsan 123456 2 zhangsan2 123456 3 zhangsan3 123456 事项表&#xff1a…

使用mac自带服务器(一行命令即可启动)

打开终端&#xff0c;开启Apache: 开启apache: sudo apachectl start 重启apache: sudo apachectl restart 关闭apache: sudo apachectl stop 启动后地址&#xff1a; http://127.0.0.1/ mac下Apache服务器的文件路径&#xff1a; 点击Finder 然后按住快捷键CommandShiftG 输入…

ccfcsp201409-3 字符串匹配

#include <bits/stdc.h> using namespace std; string s; int y, n; string o[105]; bool check(char a, char b) { // 大小写不敏感if (a b || a - a b - A || a - A b - a){return true;}return false; } int main() {cin >> s;cin >> y; // 0不敏感1敏…

挣钱新玩法,一文带你掌握流量卡推广秘诀

手机流量卡推广项目是什么&#xff1f;听名字我相信大家就已经猜出来了&#xff0c;就是三大运营商为了开发新用户&#xff0c;发起的有奖推广活动&#xff0c;也是为了长期黏贴用户。在这个活动中&#xff0c;用户通过我们的渠道&#xff0c;就能免费办理低套餐流量卡&#xf…

Linux 搭建私有yum源仓库

一、环境准备 IP系统版本作用192.168.140.155CentOS 7.9.2009yum源仓库192.168.140.153CentOS 7.9.2009测试 准备两台服务器&#xff0c;一台作为yum源仓库&#xff0c;另一台作为测试使用。 二、搭建yum源服务器 &#xff08;无法连接外网的情况&#xff0c;需要去官网下载镜…

【GoWeb框架初探————XORM篇】

1. XORM xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 1.1 特性 支持 Struct 和数据库表之间的灵活映射&#xff0c;并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit, Join, Havi…

MATLAB初学者入门(1)—— 基础知识和功能介绍

MATLAB&#xff08;Matrix Laboratory&#xff09;是一种用于数值计算、可视化以及编程的高性能语言环境。它广泛应用于工程、科学研究和教育等领域。以下是对MATLAB基础知识和编程技巧的系统性讲解&#xff0c;分为几个主要部分&#xff1a; 1. 基础操作 变量和表达式 在MAT…

记录 nginx 出现 403 forbidden 和 404 的解决经历

403 当我修改了 nginx 所展示的页面路径了以后&#xff0c;访问 nginx 所在的 8080 端口就出现了403 forbidden 的错误 首先通过以下查看进程的命令 ps -aux|grep nginx发现 worker process 对应的启动用户是 nobody 是错的 &#xff08;图中是 root&#xff0c;是改正后的样子…

【uniapp踩坑记】——微信小程序转发保存图片

关于微信小程序转发&保存图片 微信小程序图片转发保存简单说明网络图片的转发保存base64流形式图片转发保存 已经好多年没写博客了&#xff0c;最近使用在用uniapp开发一个移动版管理后台&#xff0c;记录下自己踩过的一些坑 吃相别太难看&#xff0c;搞一堆下头僵尸号来点…

vite(vue3)配置内网ip访问的方法步骤

如果没有进行配置&#xff0c;运行项目之后&#xff0c;看到的访问地址是本地访问地址&#xff0c;其他人访问不了。 如下&#xff1a; 一、配置 “ vite.config.ts ” 文件 server: {host: 0.0.0.0 }, 如图所示&#xff1a; 添加 server 配置后保存 “ vite.config.ts ” 文…

深度学习发展中的继承和创新

深度学习是一步一步发展而来的&#xff0c;新的成就也是在原有的基础上&#xff0c;逐步取得突破&#xff0c;有一些东西是一点一点变化&#xff0c;突破发展而来的&#xff0c;也就是每一次小的突破和每一次小的突破累积起来&#xff0c;构成一个明显的进步。我们可以通过观察…

C语言 ─── 操作符详解

目录 1. 算术操作符 2. 移位操作符 2.1 左移操作符 2.2 右移操作符 3. 位操作符 4. 复合赋值符 5. 单目操作符 6. 逗号表达式 7. 隐式类型转换 7.1 整型提升的意义&#xff1a; 7.2 如何进行整体提升呢&#xff1f; 8. 算术转换 ★★★数组名 1. 算术操作符 -…

实现联系人前后端界面,实现分页查询04.15

实现联系人前后端界面&#xff0c;实现分页查询项目包-CSDN博客 项目结构 数据库中建立两个表&#xff1a; 完整的后端目录 建立联系人People表&#xff0c;分组Type表&#xff0c;实现对应实体类 根据需求在mapper中写对应的sql语句 查询所有&#xff0c;删除&#xff0c;添…

【头歌-Python】人机交互自学引导

禁止转载&#xff0c;原文&#xff1a;https://blog.csdn.net/qq_45801887/article/details/137425935 参考教程&#xff1a;B站视频讲解——https://space.bilibili.com/3546616042621301 如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 人机交互翻转教学…