news 2026/4/18 8:52:08

UVa 146 ID Codes

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:59:10

‌5个开源项目:构建你的私人测试AI

AI驱动的测试革命‌ 在2026年&#xff0c;软件测试行业正经历一场由人工智能主导的变革。传统手动测试效率低下、维护成本高&#xff0c;而开源AI工具通过自动化、智能化和自愈能力&#xff0c;让测试从业者能构建私人测试AI系统&#xff0c;实现“一人一AI”的高效工作流。这…

作者头像 李华
网站建设 2026/4/15 18:46:54

Java:代理转发配置Nginx

在配置Nginx作为代理服务器时&#xff0c;可以通过修改Nginx的配置文件&#xff08;通常是nginx.conf&#xff09;来实现。下面是一些基本的步骤和示例&#xff0c;配置Nginx作为反向代理服务器。 1. 打开Nginx配置文件 首先&#xff0c;需要找到并打开Nginx的配置文件。这个文…

作者头像 李华
网站建设 2026/4/17 16:34:59

‌AI生成测试用例的“数据驱动”:输入真实用户行为

一、真实用户行为是AI生成测试用例的“黄金燃料”‌ 在软件测试领域&#xff0c;传统基于经验或需求文档的手工用例设计正被彻底重构。‌AI驱动的测试用例生成&#xff0c;其核心突破点在于以真实用户行为日志为输入源&#xff0c;构建数据驱动的自动化测试闭环‌。该方法不仅…

作者头像 李华
网站建设 2026/4/17 22:25:51

2026年API测试自动化神器对比:专业深度解析

随着微服务和云原生架构的普及&#xff0c;API测试自动化已成为软件质量保障的核心环节。2026年&#xff0c;工具生态迎来重大革新&#xff0c;AI集成、一体化协作和DevOps无缝衔接成为关键趋势。本文从测试从业者视角&#xff0c;深度评测六款主流工具&#xff08;Apifox、Pos…

作者头像 李华
网站建设 2026/4/18 8:33:45

基于微信小程序的智能雨伞取借系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

作者头像 李华
网站建设 2026/4/15 20:03:06

图文识别(OCR):让机器“读懂”世界的文字

《人工智能AI之计算机视觉:从像素到智能》 模块四:工程与应用——从模型到产品的跨越(实践指导) 第 14 篇 你好,我是你的老朋友。 咱们先从一个特别日常、特别扎心的场景聊起。 你有没有过这种经历?大热天的去医院看病,最后为了报销商业保险,还得把那堆揉得皱巴巴、…

作者头像 李华