当前位置: 首页 > news >正文

UVa 146 ID Codes

题目描述

2084 20842084年,政府为了加强对公民的控制并应对长期存在的法律与秩序问题,决定采取一项激进措施:为每位公民在左手腕植入一个微型计算机。该计算机存储个人身份信息,并包含发射器以便中央计算机追踪和监控人员的位置。

每个计算机的核心部分是一个唯一的身份识别码,最多由50 5050个字符组成,这些字符来自 26 个小写字母。任意给定的识别码所使用的字符集是随机选定的。生产识别码的复杂过程使得制造商更容易生产那些仅对已有字符进行重排的新识别码,而不是生成包含不同字母集合的全新识别码。因此,一旦选定一组字母,就会先将所有可能的排列使用完毕,然后再更换字母集合。

例如,假设某个识别码包含3 33a2 22b1 11c,那么在这些条件下,允许的60 6060个识别码中的三个按字典序从上到下依次是:

abaabc abaabc abaabc

题目要求编写程序,帮助生成这些识别码的后继(下一个字典序的识别码)。程序接收一个长度不超过50 5050的字符串(可能包含重复字符),输出该字符串对应字符集合的字典序后继,如果已经是最后一个,则输出No Successor

输入与输出格式

输入
输入包含多行,每行一个字符串表示一个识别码,以单独一行#结束。

输出
对于每个输入的识别码,输出其后继识别码或No Successor

样例输入

abaabc cbaba #

样例输出

ababac No Successor

解题思路

本题的核心任务是求一个给定字符串的字典序下一个排列。如果当前排列已是该字符集合所能构成的最大字典序排列,则输出No Successor

排列生成算法

字符串的“下一个排列”可以用标准的“下一个排列算法”来求解,该算法步骤如下:

  1. 从右向左扫描,找到第一个满足s[i] < s[i + 1]的位置i ii。如果找不到这样的i ii,说明整个序列是降序排列的,也就是字典序最大,没有后继。
  2. 从右向左扫描,找到第一个满足s[j] > s[i]的位置j jj
  3. 交换s[i]s[j]
  4. 将位置i ii之后的子串反转(即变为升序排列)。

该算法的时间复杂度为O ( n ) O(n)O(n),其中n nn为字符串长度(本题n ≤ 50 n \leq 50n50)。

使用标准库函数

C++ \texttt{C++}C++中,<algorithm>库提供了next_permutation函数,可以直接对字符串或容器求出下一个排列。如果已经是最后一个排列,该函数返回false,否则返回true并修改容器内容为下一个排列。

本题特殊之处

虽然题目描述中提到了字符集合的概念,但实际上我们只需要对输入字符串本身求下一个排列即可。因为next_permutation会自动处理重复字符和字典序逻辑,得到的就是该字符集合的下一个识别码。

代码实现

// ID Codes// UVa ID: 146// Verdict: Accepted// Submission Date: 2016-01-22// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(){string line;while(getline(cin,line),line!="#"){if(next_permutation(line.begin(),line.end()))cout<<line<<endl;elsecout<<"No Successor"<<endl;}return0;}

复杂度分析

  • 时间复杂度:每次调用next_permutationO ( n ) O(n)O(n),其中n nn是字符串长度。
  • 空间复杂度:O ( n ) O(n)O(n),用于存储字符串。

总结

本题是一个典型的“下一个排列”问题,适合用来练习排列生成算法或熟悉标准库的使用。使用C++ \texttt{C++}C++next_permutation可以简洁高效地解决问题,无需手动实现排列生成逻辑。注意特殊情况——当输入字符串已经是最大字典序时,输出No Successor

http://www.jsqmd.com/news/316913/

相关文章:

  • 大模型工具使用指南:MCP与Skills对比分析,收藏级技术解析
  • 聊聊广东诚信的塑料垃圾桶供应商,口碑好的有哪些
  • 2026年动物油设备品牌推荐,宏九动物油设备设计亮点多
  • 盘点驰创轴承规模怎么样,2026年浙江靠谱的轴承品牌推荐
  • Nodejs+vue微信小程序 Android的婚宴包厢席位预定系统7b692-vue
  • 杭州稞稞笑性价比咋样,定价策略和品牌知名度受认可吗
  • Nodejs+vue微信小程序 少儿体能早教服务教学辅助平台_92349-vue
  • 从0到1掌握RAG:解决大模型落地痛点的终极方案,建议收藏!
  • Nodejs+vue微信小程序 游天下旅游酒店预订移动端系统_d72md-vue
  • Java:代理转发配置Nginx
  • Nodejs+vue基于微信小程序的中学历史学习系统
  • 收藏!AI大模型时代九大新兴岗位全景图(附转型指南)
  • Nodejs+vue基于微信小程序的用户技能社交婚恋交友系统
  • Nodejs+vue微信小小程序 Android 的私人身体心理健康测试系统-vue
  • 收藏必看:大模型新进化:从“无思考“到“交错思维链“,AI如何真正像人一样做事
  • 宏九动物油设备受客户认可不?产品质量如何?
  • 2026年上海公司注册服务推荐,口碑好的品牌有哪些
  • Nodejs+vue微信小程序 Android的商家团购系统_z549a-vue
  • 诚信的包装设计专业公司,北京哪家费用更合理?
  • 2026年天津离婚纠纷律师联系电话推荐:精选推荐与使用指南
  • 2026年天津继承纠纷律师联系电话推荐:精选推荐与使用指南
  • 吐血推荐MBA必用TOP8AI论文平台:开题报告神器测评
  • 随身WiFi怎么选?飞猫随身WiFi推荐与选购指南:性价比、信号稳定、售后保障一次讲透
  • 书籍-艾哈迈德·爱敏《阿拉伯伊斯兰文化史》
  • Visual Paradigm 18.0 全面指南:AI 驱动的可视化建模新时代(2026)
  • 选择ENOVIA许可证优化管理平台的七大关键评估维度
  • 深圳市键键通科技有限公司 联系方式:如何有效接洽与注意事项
  • ‌AI驱动的测试用例模板统一实践:从标准框架到团队协同的完整路径
  • HTB Vaccine WP
  • 基于AI应用 + 协同过滤推荐算法的影院订票系统设计与开发 毕业设计项目实战辅导指导