2023信奥赛C++提高组csp-s复赛真题及题解:密码锁
2023信奥赛C提高组csp-s复赛真题及题解密码锁题目描述小 Y 有一把五个拨圈的密码锁。如图所示每个拨圈上是从0 00到9 99的数字。每个拨圈都是从0 00到9 99的循环即9 99拨动一个位置后可以变成0 00或8 88因为校园里比较安全小 Y 采用的锁车方式是从正确密码开始随机转动密码锁仅一次每次都是以某个幅度仅转动一个拨圈或者同时转动两个相邻的拨圈。当小 Y 选择同时转动两个相邻拨圈时两个拨圈转动的幅度相同即小 Y 可以将密码锁从0 0 1 1 5 \tt{0\;0\;1\;1\;5}00115转成1 1 1 1 5 \tt{1\;1\;1\;1\;5}11115但不会转成1 2 1 1 5 \tt{1\;2\;1\;1\;5}12115。时间久了小 Y 也担心这么锁车的安全性所以小 Y 记下了自己锁车后密码锁的n nn个状态注意这n nn个状态都不是正确密码。为了检验这么锁车的安全性小 Y 有多少种可能的正确密码使得每个正确密码都能够按照他所采用的锁车方式产生锁车后密码锁的全部n nn个状态。输入格式输入的第一行包含一个正整数n nn表示锁车后密码锁的状态数。接下来n nn行每行包含五个整数表示一个密码锁的状态。输出格式输出一行包含一个整数表示密码锁的这n nn个状态按照给定的锁车方式能对应多少种正确密码。输入输出样例 1输入 11 0 0 1 1 5输出 181说明/提示【样例 1 解释】一共有81 8181种可能的方案。其中转动一个拨圈的方案有45 4545种转动两个拨圈的方案有36 3636种。【数据范围】对于所有测试数据有1 ≤ n ≤ 8 1 \leq n \leq 81≤n≤8。测试点n ≤ n\leqn≤特殊性质1 ∼ 3 1\sim 31∼31 11无4 ∼ 5 4\sim 54∼52 22无6 ∼ 8 6\sim 86∼88 88A9 ∼ 10 9\sim 109∼108 88无特殊性质 A保证所有正确密码都可以通过仅转动一个拨圈得到测试数据给出的n nn个状态。思路分析这是一个密码锁推理问题。我们需要找到所有可能的初始正确密码使得这些密码可以通过恰好一次操作变为给定的n个状态。核心思路问题转化给定n个状态每个状态都是由正确密码通过一次操作得到的。我们需要找出所有可能的正确密码。操作类型转动一个拨圈5个位置每个位置可以向上/向下转动1~9步模10运算同时转动两个相邻拨圈4组相邻对每组可以向上/向下转动1~9步幅度相同逆向思维与其枚举所有可能密码10^5100000种然后检查是否能变为所有n个状态不如从给定的状态反向推导可能的正确密码。算法设计对于每个给定状态我们可以枚举所有可能的逆操作单拨圈逆操作对每个位置反向转动1~9步双拨圈逆操作对每对相邻位置反向转动相同的1~9步这样对每个状态我们可以得到最多5×9×2 4×9×2 162个可能的原密码。由于n很小≤8我们可以对第一个状态生成所有可能的原密码集合S1对每个后续状态生成可能的原密码集合Si求所有Si的交集同时满足所有状态过滤掉与给定状态相同的密码时间复杂度最多8个状态每个状态最多162个可能原密码求交集复杂度不高总计算量约100万次操作完全可行代码实现#includebits/stdc.husingnamespacestd;intn,cnt;inta[10][5];// 存储n个状态intcur[5];// 当前尝试的密码setints,ans;// s用于去重ans存储最终答案// 将5位密码编码为整数intencode(intx[5]){intres0;for(inti0;i5;i){resres*10x[i];}returnres;}// 检查当前密码cur是否满足所有状态boolcheck(){// 对每个给定状态检查能否通过一次操作从cur得到它for(inti0;in;i){boolokfalse;// 检查单拨圈操作for(intj0;j5;j){intdiff(a[i][j]-cur[j]10)%10;// 转动步数if(diff0)continue;// 不能不动// 其他位置必须相同boolsametrue;for(intk0;k5;k){if(kj)continue;if(a[i][k]!cur[k]){samefalse;break;}}if(same){oktrue;break;}}if(ok)continue;// 检查双拨圈操作for(intj0;j4;j){intdiff1(a[i][j]-cur[j]10)%10;intdiff2(a[i][j1]-cur[j1]10)%10;if(diff10||diff1!diff2)continue;// 其他位置必须相同boolsametrue;for(intk0;k5;k){if(kj||kj1)continue;if(a[i][k]!cur[k]){samefalse;break;}}if(same){oktrue;break;}}if(!ok)returnfalse;}returntrue;}// 生成所有可能密码voiddfs(intp){if(p5){intcodeencode(cur);// 避免重复计算同一个密码if(s.find(code)!s.end())return;s.insert(code);// 检查是否满足所有状态if(check()){ans.insert(code);}return;}// 枚举当前位置的数字0-9for(inti0;i10;i){cur[p]i;dfs(p1);}}intmain(){cinn;for(inti0;in;i){for(intj0;j5;j){cina[i][j];}}// 生成所有可能密码并检查dfs(0);// 输出结果coutans.size()endl;return0;}功能分析1. 密码编码encode()函数将5位数组编码为整数便于存储和去重2. 深度优先搜索dfs()函数枚举所有00000~99999的密码使用集合s去重虽然实际上不会重复因为dfs顺序枚举对每个密码调用check()验证3. 验证函数check()核心验证逻辑对每个给定状态检查能否通过恰好一次操作从当前密码cur得到该状态单拨圈检查遍历5个位置检查是否只有该位置不同且差值为1-9双拨圈检查遍历4对相邻位置检查是否只有这两个位置不同且差值相同1-9必须满足所有n个状态4. 去重与存储使用setint ans存储所有有效密码自动去重最终输出ans.size()得到答案数量各种学习资料助力大家一站式学习和提升#includebits/stdc.husingnamespacestd;intmain(){cout########## 一站式掌握信奥赛知识! ##########;cout############# 冲刺信奥赛拿奖! #############;cout###### 课程购买后永久学习不受限制! ######;return0;}1、csp信奥赛高频考点知识详解及案例实践CSP信奥赛C动态规划https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转CSP信奥赛C标准模板库STLhttps://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转信奥赛C提高组csp-s知识详解及案例实践https://blog.csdn.net/weixin_66461496/category_13113932.html2、csp信奥赛冲刺一等奖有效刷题题解CSP信奥赛C初赛及复赛高频考点真题解析持续更新https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转CSP信奥赛C一等奖通关刷题题单及题解持续更新https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转3、GESP C考级真题题解GESP(C 一级二级三级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转GESP(C 四级五级六级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转GESP(C 七级八级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_13117178.html4、CSP信奥赛C竞赛拿奖视频课https://edu.csdn.net/course/detail/40437 点击跳转· 文末祝福 ·#includebits/stdc.husingnamespacestd;intmain(){cout跟着王老师一起学习信奥赛C;cout 成就更好的自己 ;cout csp信奥赛一等奖属于你! ;return0;}

相关新闻

Java springboot基于Hadoop的大学多媒体教学管理系统(源码+文档+运行视频+讲解视频)

Java springboot基于Hadoop的大学多媒体教学管理系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试 四、代码参考 源码获取 目的 随着大学多媒体教学资源的日益丰富,如何高效管理这些资源成为了一个亟待解决的问题。本…

2026/7/4 9:50:44 阅读更多 →
springboot基于java web的宠物托管系统(源码+文档+运行视频+讲解视频)

springboot基于java web的宠物托管系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试 四、代码参考 源码获取 目的 宠物托管系统作为宠物服务行业的重要组成部分,对于满足宠物主人需求、保障宠物健康具有…

2026/7/3 3:50:49 阅读更多 →
百考通AI论文查重:每日200篇免费,开启学术写作智能新纪元

百考通AI论文查重:每日200篇免费,开启学术写作智能新纪元

在学术研究的浩瀚海洋中,论文查重始终是确保原创性与学术合规性的关键一环。无论是高校学生的学位论文、科研工作者的期刊投稿,还是职场人士的职称评审材料,查重结果的准确性与权威性直接决定了成果能否获得认可。然而,传统查重服…

2026/7/3 15:38:11 阅读更多 →

最新新闻

EyouCMS 1.5.5 漏洞防御实战:3步加固模板管理功能防命令执行

EyouCMS 1.5.5 漏洞防御实战:3步加固模板管理功能防命令执行

EyouCMS 1.5.5 漏洞防御实战:3步加固模板管理功能防命令执行在网站安全领域,内容管理系统(CMS)的安全防护一直是运维人员和开发者的重点关注对象。EyouCMS作为国内广泛使用的企业建站系统,其1.5.5版本中发现的模板管理…

2026/7/6 9:26:29 阅读更多 →
提示工程实战指南:从零构建高效大模型应用

提示工程实战指南:从零构建高效大模型应用

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在实际 AI 应用开发中,无论是使用 OpenAI 的 GPT 系列、Claude,还是开源的 Llama、Qwen 等大语言模型&#xf…

2026/7/6 9:26:29 阅读更多 →
CTF实战:FTP服务后门漏洞利用与渗透测试全流程解析

CTF实战:FTP服务后门漏洞利用与渗透测试全流程解析

1. 项目概述:从靶机到Flag的实战路径 最近在带新人打CTF,发现很多朋友一看到“FTP服务后门”这种题目就有点发怵,觉得是不是要搞什么高深的二进制漏洞或者复杂的协议分析。其实不然,这类题目往往是考察我们对基础服务安全性的理解…

2026/7/6 9:24:29 阅读更多 →
Zabbix监控通信安全实践:PSK加密配置全解析

Zabbix监控通信安全实践:PSK加密配置全解析

1. 项目概述:为什么Zabbix监控通信需要加密? 在运维和监控领域,Zabbix作为一款强大的开源监控解决方案,其核心功能依赖于Agent(客户端)与Server(服务器)之间持续、稳定的数据通信。这…

2026/7/6 9:24:29 阅读更多 →
AI驱动的红队作战模拟平台:Decepticon如何重塑网络安全攻防范式

AI驱动的红队作战模拟平台:Decepticon如何重塑网络安全攻防范式

1. 项目概述:当AI遇见红队,一场攻防思维的范式转移最近在安全圈里,一个名为“Decepticon”的项目讨论热度不低。乍一听名字,你可能觉得这又是哪个极客搞出来的、用来炫技的“AI黑客”玩具。但如果你深入了解一下,就会发…

2026/7/6 9:24:29 阅读更多 →
AIGC商业应用合规指南:构建版权溯源与审计体系

AIGC商业应用合规指南:构建版权溯源与审计体系

1. 项目概述:当AIGC成为生产力,合规是生存线 最近和几个做内容营销、电商运营的朋友聊天,发现大家现在用AI生成图文、视频的热情空前高涨。一个下午就能批量产出几十条小红书笔记、上百个商品详情页,效率确实惊人。但聊着聊着&…

2026/7/6 9:22:28 阅读更多 →

日新闻

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 阅读更多 →

月新闻