逐月信息学 2024 提高组 #4

\(\color{black}\texttt{A. 转盘锁}\)

题目描述

给定一个四位转盘锁,每个转盘上都有 \(0\)\(9\) 的数字。数字 \(i\) 的下一个数字是 \((i+1)\bmod 10\),上一个数字是 \((i-1)\bmod 10\)。每次你可以将一段连续的区间全部往上翻或往下翻一个数字。现在给定一个初始时的转盘,求最少需要多少次操作才能达到目标状态。

思路

首先,一个转盘锁 \(abcd\rightarrow efgh\),可以看作 \(0000\rightarrow (abcd-efgh)\bmod 10\)。所以 BFS 预处理从 \(0000\) 到其他所有状态的最短路即可。

代码

#include<bits/stdc++.h>
using namespace std;struct Node {vector<int> v;int dis;
};int T, ans;
string s, t;
queue<Node> que;
map<vector<int>, int> dist;void Record(const vector<int> &v, int dis) {if(dist.count(v)) {return;}dist[v] = dis;que.push({v, dis});
}void bfs() {Record({0, 0, 0, 0}, 0);for(; !que.empty(); ) {auto [v, dis] = que.front();que.pop();for(int i = 0; i < 4; ++i) {for(int j = i; j < 4; ++j) {for(int op : {-1, 1}) {for(int k = i; k <= j; ++k) {v[k] = (v[k] + op + 10) % 10;}Record(v, dis + 1);for(int k = i; k <= j; ++k) {v[k] = (v[k] - op + 10) % 10;}}}}}
}void Solve() {cin >> s >> t;vector<int> v = {(s[0] - t[0] + 10) % 10, (s[1] - t[1] + 10) % 10, (s[2] - t[2] + 10) % 10, (s[3] - t[3] + 10) % 10};cout << dist[v] << "\n";
}int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);bfs();for(cin >> T; T--; Solve()) {}return 0;
}

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

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

相关文章

CentOS 7 下载 网络配置 ssh配置 JDK配置 Python3配置 Git配置 nvm配置 防火墙配置

背景 CentOS 8系统2021年12月31日已停止维护服务,CentOS 7系统将于2024年06月30日停止维护服务。CentOS官方不再提供CentOS 9及后续版本,不再支持新的软件和补丁更新。 所以我们如果要安装服务器操作系统就需要安装centos7。这里我是用虚拟机安装的centos7mini版,mini版本是…

IBM服务器raid1数据恢复

IBM服务器RAID1数据恢复是一个相对复杂的过程,因为RAID1涉及数据的镜像和冗余,但一旦数据丢失,恢复的可能性仍然存在。以下是一些建议的步骤和注意事项,以帮助您进行IBM服务器RAID1数据恢复: 一、停止使用受影响的服务器 一旦发现数据丢失,首要任务是停止使用受影响的服务…

服务器刷新BIOS后死机

服务器刷新BIOS后死机是一个比较常见的问题,可能由多种原因引起。 一、原因分析 BIOS文件问题: 刷新的BIOS文件可能本身就是坏的,或者与服务器硬件不兼容。 BIOS版本选择不当,也可能导致兼容性问题。 刷新过程问题: 刷新过程中突然断电或操作不当,可能导致BIOS损坏。 硬件…

其他计算机系统基础知识

计算机语言计算机语言是指用于人与计算机之间交流的一种语言,是人与计算机之间传递信息的媒介。计算机语言主要由一套指令组成,而这种指令一般包括表达式、流程控制和集合三大部分内容。表达式又包含变量、常量、字面量和运算符。 流程控制有分支、循环、函数和异常。 集合包…

函数,调试,循环,头文件

1.关于函数 作用:避免代码重复 可以方便维护,因为当多个地方需要用到同样的代码时,如果要做出修改只需要改函数就能整体修改。 函数通常都会有返回值,什么类型的函数返回什么样的类型的值 函数通常分为函数声明和函数参数通常声明放在头文件中 函数定义发在C++文件中 这样做…

ENVI无缝镶嵌、拼接栅格数据的方法

本文介绍基于ENVI软件,利用“Seamless Mosaic”工具实现栅格遥感影像无缝镶嵌的操作~本文介绍基于ENVI软件,利用“Seamless Mosaic”工具实现栅格遥感影像无缝镶嵌的操作。在遥感图像镶嵌拼接:ENVI的Pixel Based Mosaicking工具操作方法这篇文章中,我们介绍了在ENVI软件中通…

2024暑假南京外国语学校c++集训 20240706 测试(J/S-)

A 笔记本电脑第一题没啥好说的了点击查看代码 #include<bits/stdc++.h> using namespace std; int n; set<int> t; pair<int,int> arr[100009]; int main() {ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++){cin>…

04-归纳概括题3

123 自己在做题的时候,多问问这个词配不配出现在答题纸上,寻找一种感觉。 这里有几个词是需要注意的。也许后文可以用得到。,4 这里只是引入了“村寨银行”,存在并没有发生什么变化,只是后面说用于干什么、、、,但是还没有结果啊!!!没有体现出结果啊!5 这个管理制度是…

Python 模块的制作,发布,安装

在 Python 当中,一个Python 文件就是一个模块,模块的名字就是Python文件的名字。例如:创建一个 test.py文件,那么test.py 就是一个模块模块的作用:可以使我们有逻辑的去组织我们的 Python 代码,以库的形式去封装功能,非常方便的去让调用者去使用模块中的功能可以定义函数…

PyTorch中的多进程并行处理

PyTorch是一个流行的深度学习框架,一般情况下使用单个GPU进行计算时是十分方便的。但是当涉及到处理大规模数据和并行处理时,需要利用多个GPU。这时PyTorch就显得不那么方便,所以这篇文章我们将介绍如何利用torch.multiprocessing模块,在PyTorch中实现高效的多进程处理。多…

最新扣子(Coze)实战案例:使用扩图功能,让你的图任意变换,完全免费教程

大家好,我是斜杠君。今天和大家分享一个扣子图像流中的「智能扩图」工具节点,这个节点的作用是:可以在扩大图片的同时,并自动生成图像缺失的部分。🧙‍♂️ 大家好,我是斜杠君,手把手教你搭建扣子AI应用。 📜 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》,完…