洛谷P1032 字串变换

洛谷P1032 [NOIP 2002 提高组] 字串变换 这是一个字符串变换的搜索问题,我们可以使用广度优先搜索(BFS)来解决。BFS 可以保证找到的路径是最短的,这符合题目要求输出最少变换步数的条件。测试数据非常的水,各种做法都可以通过,不代表算法正确。规则的含义为:在 A 中的子串 A1​ 可以变换为 B1​,A2​ 可以变换为 B2​⋯。若在 10 步(包含 10 步)以内能将 A 变换为 B,则输出最少的变换步数;接下来若干行,每行有两个字符串 Ai​,Bi​,表示一条变换规则。共进行了 3 次变换,使得 A 变换为 B。第一行有两个字符串 A,B。 阅读详情

题面

给出最多6个 str1->str2 的变换规则,问能否在10次以内将给出的串1变为串2。如能,则输出最少变换次数
字符串长度不超过20

分析

从最少变换次数这里不难想到bfs,结合find查找串中是否有 str1 的可变换串,再用 string的replace方法可以直接得到变换后的串

坑点1:find只会找到一个 str1 并对其做变换,但实际上变换发生的位置可以是多个的,所以每一个节点可到达的状态不止变换规则数量那么多。
例如原串 aaab 在规则 a->c 中通过一次操作可以得到三种串:caab, acab, aacb.这些都要统计入
为了应对这种情况,用 find(string, start_pos)的方法,找到所有 str1 存在的位置即可

p = cur.find(rules[0][i], p + 1);//相当于迭代

坑点2:坑点1会带来大量可能性,不是一秒内能处理的,并且会有很多重复。
所以剪枝,策略是发现对每一个串,都要检查所有的替换规则,所以在不同位置出现的同一个串可到达的情况是相同的,于是舍弃操作次数较多才能出现的该串,只保留第一次(bfs序保证这个串操作次数要小于等于其他相同的串)。这可用hash来完成,这里用map来实现hash,发现已经出现过,则跳过。

代码

#include <stdio.h>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
#include<map>
using namespace std;
int flag = -1;//记录答案
int num = 0;
string ans;
string rules[2][7];
queue<pair<string,int> >q;
map<string, int>m;
void bfs(string str)
{
    q.push(make_pair(str,0));
    int deep,p=0;
    string cur;
    string temp;
    while (!q.empty())
    {
        cur = q.front().first;
        deep = q.front().second;
        q.pop();
        if (cur == ans) { flag = deep;break; }
        if (m.count(cur)==1||deep == 10)continue;//m.count即hash去重
        m[cur] = 1;
        for (int i = 0; i < num; i++)
        {
            p=cur.find(rules[0][i]);
            while (p!=cur.npos)
            {
                temp = cur;
                q.push(make_pair(temp.replace(p, rules[0][i].length(), rules[1][i]), deep + 1));
                p = cur.find(rules[0][i], p + 1);//迭代寻找所有可能替换
            }
        }
    }
}
int main()
{
    ios::sync_with_stdio(false);
    string raw;
    cin >> raw >> ans;
    while (cin>>rules[0][num])
    {
        cin >> rules[1][num++];
    }
    bfs(raw);
    if (flag != -1)cout << flag;
    else cout << "NO ANSWER!";
    return 0;
}
基于YOLOv8的药品包装目标检测:从数据集构建到模型部署实战 目标检测是计算机视觉的核心任务之一,旨在识别图像中特定物体的位置与类别。其原理通常基于深度学习模型,通过卷积神经网络提取特征,并利用边界框回归与分类头实现定位与识别。该技术在自动化、智能化领域具有重要价值,尤其在零售、物流等场景中,能显著提升效率与准确性。本文聚焦于一个具体的应用场景——药品包装识别,通过构建包含‘板蓝根颗粒’与‘999感冒灵’的专用数据集,详细阐述了从数据采集、标注(支持VOC与YOLO格式)、模型训练(以YOLOv8为例)到性能优化与轻量化部署的完整工程实践流程,为相关领域的算法落地提供 阅读详情

相关推荐

阻容降压 vs 开关电源:5V小功率供电方案成本与安全深度对比

本文深度对比了阻容降压电路与开关电源在5V小功率供电方案中的核心差异。重点剖析了二者在成本、体积、效率、温升及安全隔离等方面的优劣,并结合智能温控器、LED驱动等典型应用场景,为硬件工程师提供了清晰的选型决策框架,帮助在成本与安全之间做出最佳权衡。

weixin_29310631的博客 702

洛谷P1032 字串变换题解

BFS,设置一个结构体,将当前已被替换的字符串和步数放入队列,特别要注意当前串可能不只有一个子串,所以要用while循环扫完所有,注意while语句里的break一定要加上。 #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<string...

weixin_43175029的博客 278

保姆级避坑指南:用Docker在Ubuntu 22.04上部署Isaac Sim 5.1.0,搞定宇树G1仿真环境

本文提供了一份详细的保姆级避坑指南,帮助用户在Ubuntu 22.04上通过Docker部署Isaac Sim 5.1.0,并成功搭建宇树G1仿真环境。文章涵盖了环境准备、Docker与NVIDIA容器工具包的配置、Isaac Sim镜像的定制化拉取与配置,以及宇树G1仿真环境的实战调试,旨在帮助开发者高效解决部署过程中的常见问题。

weixin_33728268的博客 207

洛谷 P1032 字串变换

洛谷 P1032 字串变换 题目: 有公式,转链接 题解: 坑点重重... ... 要用bfs (第一个搜到的就是答案,节约时间) 一个字符串可能对应着许多不同的字符串 bfs模版里pop时vis数组也要相应的清零 用map去重 记得无解的情况 一个串中可能有多个可替换串 #include <iostream> #include <cstdio> #i...

aochongbi5356的博客 128

二相混合式步进电机闭环矢量控制simulink仿真(含仿真文件)

在位置跟踪伺服系统中二相混合式步进电机闭环矢量控制simulink仿真

qq_39023633的博客 2万+

目标检测技术的发展:从R-CNN、YOLO到DETR、DINO

OV-DINO的出现标志着在开放域目标检测领域的重大进步,其在处理未见过的物体类别时的能力得到了显著提升。这项技术对于需要适应未知或变化环境的应用具有重要意义,如自动驾驶、机器人视觉、安防监控等。

DeepAIedu的博客 2629

[洛谷]P1032 字串变换 (#搜索)

题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A_1A1​ -&gt;B_1B1​ A_2A2​ -&gt; B_2B2​ 规则的含义为:在 AA中的子串 A_1A1​ 可以变换为B_1B1​,A_2A2​ 可以变换为 B_2B2​ …。 例如:AA='abcdabcd'BB='xyzxyz' 变换规则为: ‘abcabc’-&gt;‘xuxu’-&g...

A.pro的博客 441

Allegro快速编辑丝印文字操作指导

选择setup-Application Mode-placement edit。Allegro支持丝印文字的编辑,下面介绍快速编辑丝印文字的两种方法如下。这个功能还支持拷贝粘贴,可以从其它地方拷贝过来,免去了书写的麻烦。出现text edit窗口,输入自己需要的文字,点击ok。鼠标移动到丝印文字位置,文字会被高亮起来。Allegro快速编辑丝印文字操作指导。点击丝印文字,丝印会被高亮起来。选择Text edit 命令。输入需要更改后的文字,如下。右击选择text edit。以编辑下方丝印文字为例。

weixin_54787054的博客 4192

洛谷 P1032 [NOIP 2002 提高组] 字串变换-普及+/提高

本题不保证存在靠谱的多项式复杂度的做法。测试数据非常的水,各种做法都可以通过,不代表算法正确。因此本题题目和数据仅供参考。本题为搜索题,本题不接受 hack 数据。数据,保证所有字符串长度的上限为。,则输出最少的变换步数;接下来若干行,每行有两个字符串。NOIP 2002 提高组第二题。及一组字串变换的规则(至多。可以经过一系列的变换变为。可以变换为 $ B_1。A_2$ 可以变换为。,表示一条变换规则。

weixin_37253733的博客 1498

STM32CubeIDE下载程序报错:Failed to execute MI command: load G:\\Cube_IDE_EXP\\00_FIRST\\Debug\\00...如何解决??

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2594

STM32 MCU解除读保护的方法及STM32CubeProgrammer的应用

下面是一个简单的源代码示例,演示如何在STM32CubeProgrammer中使用命令行界面(Command-Line Interface,CLI)来解除STM32 MCU的读保护。通过按照这些步骤操作,您可以成功解除STM32 MCU的读保护,并在需要的时候进行调试、烧录或修改固件。模块调用了STM32CubeProgrammer的命令行界面(CLI),并传递了相应的参数来解除STM32 MCU的读保护。请注意,在进行任何与读保护相关的操作之前,请确保您拥有合法的授权和权利,以避免潜在的安全风险。

ZwcCsharp的博客 3548

洛谷—P1032 字串变换题解

题目链接: P1032 字串变换 解题思路: 题意已经把做法写得特别露骨了。。。最小步数,最多6个变换规则。。。。广搜自不必说,不仅可以寻找解而且还能判断步数(根据广搜首解最优的性质可以得到)。开两个数组记录串的转换关系,然后以a串(原串)为起点开始搜索,搜索目标是b串。需要一个map记录某个串是不是被搜到过,如果已经搜过了就不再继续搜 。我们枚举所有可能的转换手段,枚举当前队列中队头那个串的每一个位置,然后去尝试拼接,如果有相同串则拼接。拼接函数如下: inline string getStr(strin

NCU_tanghulu的博客 480

【异常】OpenClaw 飞书端 OpenClaw: access not configured. Pairing code: [] Ask the bot owner to approve with

摘要: OpenClaw飞书机器人交互中出现的access not configured报错,是因用户或组织未配置访问权限触发的拦截提示。报错包含组织单元ID和配对校验码,需管理员审批开通权限。普通用户需提交完整报错信息给管理员处理;管理员可通过执行标准化命令单次审批,或批量配置组织白名单优化权限管理。建议提前梳理权限范围、及时同步组织架构变更,并定期审计权限列表以确保安全合规。

奶爸的编程之路,也就一周冷个三天 370

洛谷: P1032 [NOIP 2002 提高组] 字串变换

该题可以用bfs做,也可以用dfs做,但是该题更适合用bfs来做。因为如果用dfs的话要进行一系列的优化,才可以通过所有测试点,而相同的思路来用bfs做的话就不用这些优化就能过。规则的含义为:在 A 中的子串 A1​ 可以变换为 B1​,A2​ 可以变换为 B2​⋯。若在 10 步(包含 10 步)以内能将 A 变换为 B,则输出最少的变换步数;接下来若干行,每行有两个字符串 Ai​,Bi​,表示一条变换规则。共进行了 3 次变换,使得 A 变换为 B。例如:A=abcd,B=xyz,

2301_81848095的博客 438

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

洛谷 P1032 [NOIP 2002 提高组] 字串变换

如果一个字符串经过变换后得到的字符串是已经能从另一个源头出发变换得到,那么就找到了一条从起点到终点的路径,返回路径长度。解空间树中每个结点包含的状态为一个字符串s,该结点的子结点中的字符串为字符串s通过变换规则可以变化而成的字符串。后的字符串t,判断t是否已出现过,如果t未出现过,则标记t已出现过,而后将t加入队列,变化的步数要增加1。如果出队的字符串u是目标字符串,且步数小于等于10步,则返回变化步数。的长度为len,枚举字符串u中所有长为len的子串,如果存在子串为。的变换规则,已知字符串。

君义NOIP的博客 863

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[抄]洛谷 P1032 字串变换

字符串的stl大法

我要吃熊猫 720

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

洛谷 P1032 字串变换:BFS 高效解法详解

本文解决字符串转换问题,给定初始字符串A、目标字符串B和最多6条替换规则,要求在10步内找到最少转换步数,否则输出“NOANSWER!”. 采用广度优先搜索(BFS)算法,通过状态队列处理所有可能的转换路径,并使用哈希表记录已访问状态以避免重复计算。算法包含严格步数限制和全面规则匹配,确保找到最优解。代码实现采用C++标准库,高效处理字符串替换和状态管理,适用于各类字符串转换问题。

stillwatersss的博客 1048

洛谷 P1032 字串变换(BFS,字符串)

链接:洛谷 P1032 这题要注意的点(keng)挺多的… 题目描述 已知有两个字串A,B及一组字串变换的规则(至多6个规则): A 1 -&amp;amp;gt; B 1 A 2 -&amp;amp;gt; B 2 ​ 规则的含义为:在 A中的子串 A 1可以变换为 B 1,A 2 可以变换为 B 2…。 例如:A=‘abcd’ B=’xyz’ 变换规则为: ‘abc’-&amp;amp;gt;‘xu’ ‘ud’-&amp;a

Plus Ultra! 563

[洛谷P1032] 字串变换

洛谷题目链接:字串变换 题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1、A2 可以变换为 B2 …。 例如:A='abcd'B='xyz' 变换规则为: ‘abc’->‘xu’‘ud’->‘y’‘y’->‘yz’ 则此时,A 可以经过一系列...

dengtun2502的博客 211
上一篇: 恺撒(Caesar)密码 与 映射(Affine)密码
下一篇: 洛谷 P2735 [USACO3.4]网 Electric Fences
engineoid
博客等级 码龄10年 6粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值