UVa 628 Password
题目描述给定一个由若干单词组成的字典和若干规则每个规则由字符#和0组成其中#表示从字典中选取一个单词0表示选取一个数字000到999。要求生成所有可能的密码即用字典中的单词依次替换规则中的#用数字替换规则中的0得到的所有字符串。输出时按规则顺序同一规则下按字典顺序单词按字典输入顺序数字按升序。输入可能包含多组数据每组由字典和若干规则组成。输入格式第一行为一个整数nnn0n≤1000 n \le 1000n≤100表示字典中的单词数量。接下来nnn行每行一个单词长度111到255255255由字母和数字组成。随后一行是一个整数mmmm1000m 1000m1000表示规则数量。接下来mmm行每行一个规则长度不超过255255255由字符#和0组成其中至少含有一个0#可有可无。输入包含多组这样的数据直到文件结束。输出格式对于每组数据首先输出一行--两个连字符。然后对于每条规则按顺序输出所有匹配的密码即按照规则中#和0的位置用字典中的单词和数字替换后产生的全部字符串。同一规则下数字部分按升序000到999生成单词部分按字典输入顺序依次替换形成笛卡尔积。字典序由规则中#和0的位置决定即替换顺序固定为从左到右。样例输入2 root 2super 1 #0 1 admin 1 #0#输出-- root0 root1 root2 2super0 2super1 2super2 2super3 2super4 2super5 2super6 2super7 2super8 2super9 -- admin0admin admin1admin admin2admin admin3admin admin4admin admin5admin admin6admin admin7admin admin8admin admin9admin题目分析本题是典型的排列组合生成问题。规则中的每个#位置可以放置任意一个字典单词每个0位置可以放置任意一个数字000到999。最终密码由规则串中的符号顺序决定只需依次替换即可。由于0出现次数最多777次#出现次数不限但规则长度有限因此组合数量可能很大但题目要求全部输出只需递归枚举。解题思路读入字典单词存入数组。读入规则个数对每条规则将规则中的0替换为另一个字符如$以便在递归中区分数字和单词位置代码中直接用rule[j] 0判断但改为$是为了在回溯时统一处理。使用深度优先搜索DFS\texttt{DFS}DFS遍历规则串的每个位置若当前位置字符为#则枚举所有字典单词按输入顺序将对应单词输出或存储到临时数组继续递归。若当前位置字符为$即原0则枚举数字000到999继续递归。当遍历完规则串所有位置时将临时数组中的内容拼接成密码并输出。每组数据开始时输出--每条规则生成的密码连续输出不同规则间无额外空行。复杂度分析设字典大小为nnn规则长度为LLL其中#个数为aaa0个数为bbb则密码总数为na×10bn^a \times 10^bna×10b。由于b≤7b \le 7b≤7aaa受规则长度限制L≤255L \le 255L≤255但n≤100n \le 100n≤100在最坏情况下数量可能极大但题目要求全部输出因此必须接受。递归深度为LLL每次递归枚举nnn或101010种选择时间复杂度正比于输出数量。代码实现// Passwords// UVa ID: 628// Verdict: Accepted// Submission Date: 2016-08-27// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intn,m,password[260];string dictionary[110];voidbacktrack(string rule,intdepth){if(depthrule.length()){for(inti0;irule.length();i){if(password[i]0)coutdictionary[password[i]];elsecout(char)(0password[i]10);}cout\n;}else{if(rule[depth]#){for(intj0;jn;j){password[depth]j;backtrack(rule,depth1);}}else{for(intj0;j9;j){password[depth]j-10;backtrack(rule,depth1);}}}}intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);string rule;while(cinn){for(inti0;in;i)cindictionary[i];cout--\n;cinm;for(inti1;im;i){cinrule;for(intj0;jrule.length();j)if(rule[j]0)rule[j]$;backtrack(rule,0);}}return0;}总结本题通过深度优先搜索枚举规则中每个符号的所有可能选择生成所有密码。关键点在于用数组password记录每个位置选择的索引单词索引或负数表示数字。数字位置用负值表示输出时转换回字符。规则中0替换为$便于在递归中区分。输出顺序由规则顺序和字典顺序自然决定因为单词按输入顺序枚举数字按升序枚举。该解法直接暴力的生成所有组合适合规则中0数量少的情况若0数量较多最多 7 个输出量可能巨大但题目要求如此。

相关新闻

PointPillars 3D检测实战:KITTI数据集训练与评估,mAP达73.3%(附PyTorch代码)

PointPillars 3D检测实战:KITTI数据集训练与评估,mAP达73.3%(附PyTorch代码)

PointPillars 3D检测实战:从KITTI数据预处理到73.3% mAP的完整实现指南在自动驾驶和机器人感知领域,3D目标检测技术正经历着从学术研究到工业落地的关键转变。传统基于体素(voxel)的方法如VoxelNet和SECOND虽然取得了不错的效果&a…

2026/7/6 8:47:55 阅读更多 →
防火玻璃到底是不是安全玻璃(一)

防火玻璃到底是不是安全玻璃(一)

防火玻璃到底是不是安全玻璃(一) ——两个完全相反的正确答案 防火玻璃是不是安全玻璃? 对于这个问题,有两个完全相反的答案,“是”和“不是”。 但是,在现行国家标准体系下,这两个答案竟然都是正确的!

2026/7/6 8:47:55 阅读更多 →
生产级AI代理如何不迷失方向 Fable5的循环与目标系统完整拆解

生产级AI代理如何不迷失方向 Fable5的循环与目标系统完整拆解

2026年,越来越多独立开发者、AI驱动的机构和产品团队开始把核心运营工作交给模型。但现实很快打脸:模型跑着跑着就偏离目标、重复劳动、或者在第4轮后彻底忘记上周做了什么。直接扔一个大prompt给Claude或类似模型,初期看起来聪明&#xff0c…

2026/7/6 8:45:54 阅读更多 →

最新新闻

JMeter录制脚本全攻略:从零搭建性能测试自动化流水线

JMeter录制脚本全攻略:从零搭建性能测试自动化流水线

1. 项目概述:为什么录制脚本是性能测试的“临门一脚” 刚接触性能测试的新手,常常会卡在第一步:脚本怎么写?手动在JMeter里一个个添加HTTP请求,配置参数、头信息,不仅效率低下,还容易出错&#…

2026/7/6 9:53:09 阅读更多 →
从零搭建可私有化部署的AI Agent:Hermes三层记忆架构与实战指南

从零搭建可私有化部署的AI Agent:Hermes三层记忆架构与实战指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在尝试将 AI Agent 从“玩具”升级为“生产力工具”时,发现了一个普遍痛点:很多教程要么停留在概念和 API…

2026/7/6 9:53:09 阅读更多 →
Python+Selenium UI自动化测试框架搭建:从PO模式到Pytest实战

Python+Selenium UI自动化测试框架搭建:从PO模式到Pytest实战

1. 项目概述与核心价值 最近在团队里做技术复盘,发现很多测试同学在尝试UI自动化时,总是一上来就埋头写脚本,结果代码越写越乱,维护成本高到离谱,最后项目不了了之。这让我想起几年前自己踩过的那些坑,所以…

2026/7/6 9:49:00 阅读更多 →
Kimi    LeetCode 3495. 使数组元素都变为零的最少操作次数 Rust实现

Kimi LeetCode 3495. 使数组元素都变为零的最少操作次数 Rust实现

这是 LeetCode 3495 的 Rust 实现。题目理解- 每个查询 [l, r] 定义数组 nums [l, l1, ..., r] - 每次操作选两个数 a, b,替换为 ⌊a/4⌋ 和 ⌊b/4⌋ - 求将所有元素变为 0 的最少操作次数核心思路一个数 x 变为 0 需要的操作次数是满足 4^p > x 的最小 p&#…

2026/7/6 9:49:00 阅读更多 →
Java加密算法实战宝典:从AES、RSA到国密算法与安全实践

Java加密算法实战宝典:从AES、RSA到国密算法与安全实践

1. 项目概述:为什么Java开发者必须掌握加密算法?在当今这个数据即资产的时代,无论你是开发一个简单的用户登录模块,还是构建一个处理敏感交易的金融系统,数据安全都是悬在头顶的达摩克利斯之剑。我见过太多项目&#x…

2026/7/6 9:46:56 阅读更多 →
Python实现DDoS攻击模拟工具:从SYN Flood到HTTP Flood的攻防实战

Python实现DDoS攻击模拟工具:从SYN Flood到HTTP Flood的攻防实战

1. 项目概述:为什么我们需要一个Python DDoS测试工具?在网络安全领域,DDoS(分布式拒绝服务)攻击始终是企业与组织面临的最直接、最具破坏性的威胁之一。它不窃取数据,却能通过海量无效请求耗尽目标服务器的…

2026/7/6 9:46:56 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻