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

P13735 [JOIGST 2025] 魔法阵 / Magic Circle 题解

目描述

比太郎所在的魔法学校即将举办运动会。运动会中有一个项目,称为“魔法阵”。

有 � 个魔法阵依次排列在一个圆上,顺时针编号为 1 到 �。每个魔法阵为红色或蓝色中的一种,使用长度为 � 且仅包含小写字母br字符串 � 表示:��(1≤�≤�) 为r则表示魔法阵 � 为红色,否则为蓝色。

比太郎可以通过如下的两种方式在魔法阵中传送:

  • 选择一个相邻的魔法阵,花费 1 秒传送过去。换句话说,可以在魔法阵 �(1≤�≤�−1) 和 �+1 间传送(两个方向均可),也可以在魔法阵 1 和 � 间传送(两个方向均可);
  • 选择一个与当前所在魔法阵颜色相同的魔法阵(不一定要相邻),花费 1 秒传送过去。

目前他仅得知每个魔法阵的颜色,但并不知道运动会当天具体的传送计划。于是他决定考虑 � 个传送计划:在第 � 个计划中,他要从魔法阵 �� 开始,花费最少的时间传送到魔法阵 ��。

请你对于每一个传送计划,求出最少需要花费的时间。

输入格式

第一行输入两个整数 �,�。

第二行输入一个字符串 �。

接下来 � 行,每行输入两个整数 ��,��。

输出格式

输出 � 行,在第 � 行输出一个整数,表示第 � 个传送计划最少需要花费的传送时间(单位:秒)。

输入输出样例 #1

输入 #1

5 2 rbrbb 5 3 4 5

输出 #1

2 1

输入输出样例 #2

输入 #2

4 3 brrr 2 4 1 3 3 1

输出 #2

1 2 2

输入输出样例 #3

输入 #3

6 3 brbrbr 1 2 2 5 2 4

输出 #3

1 2 1

输入输出样例 #4

输入 #4

6 5 bbbrrr 2 3 2 4 2 5 2 6 2 1

输出 #4

1 2 3 2 1

说明/提示

【样例解释 #1】

在此样例中,魔法阵的颜色分别为红色、蓝色、红色、蓝色、蓝色。

对于第一组计划(5→3),比太郎可以使用如下传送方案:

  1. 从魔法阵 5 传送到相邻的魔法阵 1,花费 1 秒;
  2. 从魔法阵 1 传送到颜色相同的魔法阵 3,花费 1 秒。

最少需要花费的时间为 2 秒。可以证明不可能在小于 2 秒的时间内从魔法阵 5 传送到魔法阵 3。

对于第二组计划(4→5),比太郎可以使用如下传送方案:

  1. 从魔法阵 4 传送到颜色相同的魔法阵 5,花费 1 秒。

最少需要花费的时间为 1 秒。

该样例满足子任务 5,6 的限制。

【样例解释 #2】

该样例满足子任务 2,5,6 的限制。

【样例解释 #3】

该样例满足子任务 3,5,6 的限制。

【样例解释 #4】

该样例满足子任务 4,5,6 的限制。

【数据范围】
  • 3≤�≤5×105;
  • 1≤�≤5×105;
  • � 为仅包含小写字母br的长度为 � 的字符串;
  • 1≤��,��≤�(1≤�≤�);
  • ��≠��(1≤�≤�)。
【子任务】
  1. (6 分)�=3,�≤100;
  2. (13 分)�1 为b,� 的其他字符均为r
  3. (18 分)� 为偶数,� 奇数位置的字符为b,偶数位置的字符为r
  4. (23 分)� 为偶数,� 的前 �2 个字符为b,后 �2 个字符为r
  5. (21 分)�,�≤100;
  6. (19 分)无附加限制。

题解

题意

给出一个含有 N 个点的圆,每个点为红色蓝色,使用相邻传送同色传送,求出从点 x 至点 y 的最少传送次数。

思路
  • ��≠��(1≤�≤�)。

至少也要传送一次
所以有两种情况:

  1. 颜色相同 || 魔法阵��和魔法阵��相邻
    那么直接同色传送就行,输出1。
  2. 颜色不同 && 魔法阵��和魔法阵��不相邻
    那么在圆上必定存在两种不同颜色相邻,可以从魔法阵��同色传送到其中一个,相邻传送到另一个,再同色传送到魔法阵��。所以最多3次。
    直接用if大法分类讨论一下就行。(魔法阵��或魔法阵��与不同颜色魔法阵相邻就输出2,否则输出3)

AC代码:

#include<bits/stdc++.h> using namespace std; int main(){ int n,q,i,x,y,s,b,sum; string a; cin>>n>>q; cin>>a; a=" "+a; for(;q>0;q--){ cin>>x>>y; if(a[x]==a[y]||abs(x-y)==1||abs(x-y)==n-1){ cout<<1<<'\n'; continue; } s=y-1,b=y+1; if(s<1) s=n;///////注意魔法阵依次排列在一个圆上,首尾相连,要注意边界 if(b>n) b=1; if(a[s]==a[x]||a[b]==a[x]){ cout<<2<<'\n'; continue; } s=x-1,b=x+1; if(s<1) s=n; if(b>n) b=1; if(a[s]==a[y]||a[b]==a[y]){ cout<<2<<'\n'; continue; } cout<<3<<'\n'; } return 0; }
http://www.jsqmd.com/news/1140262/

相关文章:

  • 机器人强化学习中的可恢复性设计:从仿真到实机的物理域建模
  • 大模型时代的流量调度与架构演进:解构基于语义的路由策略
  • TVA在具身智能的创新应用案例(12)
  • 百度网盘Mac版破解插件终极指南:三步解锁SVIP高速下载
  • Hermes Agent:构建自适应AI代理的长期学习循环与部署指南
  • Windows本地智能体实战:OpenClaw零代理部署与可调试Skills开发
  • 海外公司分布在多个国家后,实体信息和合规状态总对不上,哪些供应商能统一管理?
  • SU-03T/SmartPi GPIO 输入与无线接收器干扰问题排查指南
  • Claude Code的Skill、MCP、Hook、Plugin到底有什么区别?如何判断该用哪个?
  • HsMod终极指南:55项炉石传说功能增强插件完全教程
  • 小说下载器终极指南:5步打造你的私人数字图书馆,永久保存全网小说资源
  • 如何让macOS音乐播放拥有完美歌词:LyricsX智能歌词同步终极指南
  • 【技术实战】成都牙科诊所GEO优化指南:用技术破解获客难题
  • CZSC缠论插件:3分钟实现通达信智能缠论分析的完整指南
  • 音频编辑的三大痛点与Audacity的免费解决方案
  • c++ OCCT (Open CASCADE Technology)
  • 企业拓客难?沃创云大模型AI外呼,8大优势实现降本增效
  • Wwise音频文件终极指南:3分钟学会游戏音效解包与替换
  • 惠普游戏本终极性能控制:用OmenSuperHub彻底告别官方臃肿软件
  • 【办公提效神器】 OpenClaw 2.7.9 部署避坑指南 适配 Win10/11 系统(含安装包)
  • Notepad--:中国人自己的跨平台文本编辑器
  • 药性平和的参苓健脾丸,日常脾胃调理知识科普
  • 如何用开源小说下载器轻松建立个人数字图书馆:200+网站一键批量保存指南
  • 如何5分钟快速上手炉石传说脚本:告别繁琐操作的完整智能自动化指南
  • Acrel在新能源系统计量与监测方案详解:光伏、储能、充电桩三大场景应用
  • Unity三维模型的导入与调整:从文件准备到场景适配的完整指南
  • 终极二维码修复神器:QRazyBox让损坏的二维码起死回生
  • LitCAD完整教程:5分钟掌握免费开源二维CAD绘图软件
  • RevokeMsgPatcher 2.1:Windows平台微信QQ防撤回终极指南,五分钟快速上手!
  • Elmer FEM终极指南:5个技巧让开源多物理场仿真变得简单