洛谷 1032 字串变换

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

*stl大法好!⁽⁽◝( ˙ ꒳ ˙ )◜⁾⁾ — sys

go to the problem

题目描述

已知有两个字串 A, B 及一组字串变换的规则(至多6个规则):

     A1 -> B1

     A2 -> B2

规则的含义为:在 A$中的子串 A1 可以变换为 B1、A2 可以变换为 B2 …。

例如:A=’abcd’B=’xyz’

变换规则为:

‘abc’->‘xu’‘ud’->‘y’‘y’->‘yz’

则此时,A 可以经过一系列的变换变为 B,其变换的过程为:

‘abcd’->‘xud’->‘xy’->‘xyz’

共进行了三次变换,使得 A 变换为B。

输入输出格式

输入格式:
键盘输人文件名。文件格式如下:

A B A1 B1 \

   A2 B2 |-> 变换规则

… … /

所有字符串长度的上限为 20。

输出格式:
输出至屏幕。格式如下:

若在 10 步(包含 10步)以内能将 A 变换为 B ,则输出最少的变换步数;否则输出“NO ANSWER!”

输入输出样例

输入样例#1:
abcd xyz
abc xu
ud y
y yz
输出样例#1:
3

寻找最终串并记录变换步数,最好做的就是Bfs。
问题就是怎么去在一个串中找到其中的可以变换的串的位置同时把它转换为另一个串,并且对转换后的串进行判重。
对于在一个串中找另一个字符或字符串,这里安利一个< cstring >库里的find函数。
从网上找到的find类函数详解–>

 s.find('a') //若省略第2个数,则默认从位置0(即第1个字符)开始查找
 s.find('a',1)//从位置1开始查找。
 s.find(a, 1)//从字符串a的位置1开始匹配,返回第一次成功匹配时匹配的串的首字符在s中的位置,失败返回npos
 s.find("aabbcc", 1, 3) /* 取aabbcc的前3个字符(aab)进行匹配,相当于s.find("aab", 1),第3个参数超出第1个参数的长度时,返回npos*/

find函数若查找成功,则返回找到的第一个字符或子串的位置(从0开始);若查找失败,则返回npos,即-1(4294967295)。(查找位置超出字符串长度,也为查找失败)
对于串的转换,可以用assign函数来解决。
c.assign(s,0,5); //把s中从第0位开始的长度为5的字符串赋值给c。
判重可以用map。
map< string,int >used

代码(-`ω-)✧
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;

string s,t,a,b,c,d,A[10],q[11000],ma[11];
map<string,int>used;
int cnt,Cnt[11000];

int Bfs()
{
    int head=0,tail=1;
    used[s]=1;
    q[tail]=s;
    while(head<tail)
    {
        ++head;
        for(int i=1;i<=cnt;++i)
        {
            int l=q[head].length(),L=A[i].length();
            for(int j=0;j<=l-L;++j)
            {
              int k=q[head].find(A[i],j);
              if(k!=-1)
              {
                 d.clear();
                 c.clear();
                 if(k!=0) c.assign(q[head],0,k);
                 c+=ma[i];
                 if(k+L!=l) d.assign(q[head],k+L,l-k-L+1);
                 c+=d;
                 if(!used[c])
                 {
                     used[c]=1;
                     q[++tail]=c;
                     Cnt[tail]=Cnt[head]+1;
                     if(Cnt[tail]>10) return -1;
                     if(c==t) return Cnt[tail];
                 }
              }
            }
        }
    }
    return -1;  
}
int main()
{
    cin>>s>>t;
    while(cin>>a>>b)
    {
        A[++cnt]=a;
        ma[cnt]=b;
    }
    int ans=Bfs();
    if(ans==-1) cout<<"NO ANSWER!";
    else cout<<ans;
    return 0;
}
基于YOLOv8的药品包装目标检测:从数据集构建到模型部署实战 目标检测是计算机视觉的核心任务之一,旨在识别图像中特定物体的位置与类别。其原理通常基于深度学习模型,通过卷积神经网络提取特征,并利用边界框回归与分类头实现定位与识别。该技术在自动化、智能化领域具有重要价值,尤其在零售、物流等场景中,能显著提升效率与准确性。本文聚焦于一个具体的应用场景——药品包装识别,通过构建包含‘板蓝根颗粒’与‘999感冒灵’的专用数据集,详细阐述了从数据采集、标注(支持VOC与YOLO格式)、模型训练(以YOLOv8为例)到性能优化与轻量化部署的完整工程实践流程,为相关领域的算法落地提供 阅读详情

相关推荐

Bertopic库安装(二)

Bertopic库安装

weixin_43392789的博客 4893

洛谷P1032字串变换

规则的含义为:在 A 中的子串 A1​ 可以变换为 B1​,A2​ 可以变换为 B2​⋯。例如:A=abcd,B=xyz,共进行了 3 次变换,使得 A 变换为 B。

m0_74246669的博客 992

保姆级避坑指南:在NVMe SSD上安装Ubuntu 24.04,搞定RST错误和分区方案

本文提供在NVMe SSD上安装Ubuntu 24.04的详细指南,解决RST错误和分区方案问题。从BIOS设置到分区策略优化,帮助用户充分发挥NVMe固态硬盘性能,避免常见安装陷阱,实现无痛安装和后期调优。

weixin_26976635的博客 560

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

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

stillwatersss的博客 1048

假新闻检测论文分享(25)L-DefenseExplainable Fake News Detection With Large Language Model

现有的假新闻检测工作主要集中在通过深度网络结合多种信息来学习假新闻的潜在特征,如可信度、立场、传播模式、额外知识、域外数据等。尽管他们在探测上取得了成功,但受限于他们的黑箱性质,他们无法提供任何对公众至关重要的理由。为解决这一问题,一些研究致力于可解释假新闻检测(EFND),旨在同时生成准确性预测和解释。许多工作通过注意力机制在相关报道中注意突出特别的单词、短语或句子来提供可解释性。然而,这些工作只发现了对最终预测有高贡献的区域,缺乏直观和可信的解释。

weixin_41964296的博客 730

在最新版eclipse中配置使用AI AIcoder _AIcoder配置GPUSTACK使用_配置OLLAMA本地AI模型利用_集合---AI场景应用工作笔记

本文介绍了三款实用的编程辅助工具:一款便捷的反编译插件,可直接在插件市场安装使用;GitHub Copilot提供每月2000次代码补全和50条聊天记录的免费额度,支持智能代码提示功能;aicoder支持配置本地模型运行。这些工具都能有效提升开发效率,其中GitHub Copilot的智能补全功能尤为突出。

添柴程序猿的专栏 1235

洛谷——P1032 字串变换

题目描述: 已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则): A1 -&gt; B1 A2 -&gt; B2 规则的含义为:在A 中的子串 A1 可以变换为 B1 ,A2可以变换为 B2…。 ​例如: A =’ abcd ’ BB =’ xyz ’ 变换规则为: ‘ abc ’-&gt;‘ xu ’ ‘ ud ’-&gt;‘ y ’ ‘ y ’-&gt;‘ yz ...

qq_39547506的博客 455

嵌入式PCB电源完整性分析:PDN建模与电流密度优化

电源完整性(PI)是高速数字与混合信号系统稳定运行的基础,其核心在于保障芯片供电网络(PDN)在动态负载下的电压稳定与热安全。PDN分析本质上是通过量化电流密度与电压降两个关键物理量,揭示PCB走线、过孔及平面的载流瓶颈与压降路径。电流密度超标将引发局部温升与可靠性风险,而电压降则直接侵蚀器件供电裕量,导致复位、采样失真等典型故障。借助Altium Designer等工具开展工程级PDN建模,需严格依据电源预算表定义源/负载,并精准配置铜厚、过孔参数及IPC-2152限值,从而实现从原理图到制造工艺的闭环验

weixin_28949937的博客 209

字符串转换

 P1032 字串变换 题目描述 已知有两个字串 A,B 及一组字串变换的规则(至多 6个规则): A1​ -&gt;B1​ A2​ -&gt; B2​ 规则的含义为:在 A 中的子串 A1​ 可以变换为 B1​ , A2​ 可以变换为 B2​ …。 例如: A =' abcd ' BB =' xyz ' 变换规则为: ‘ abc ’-&gt;‘ xu ’‘ ud ’-&gt;‘ ...

hnlg311709000526的博客 443

药物对接仿真软件:HADDOCK_(16).实践项目:抗体-抗原对接案例

定义分子结构文件。

kkchenjj的博客 579

(汇总篇)语义SLAM相关开源方案| 全球优秀作者与实验室 | SLAM学习资料整理

SLAM 与深度学习相结合的工作当前主要体现在两个方面,一方面是将语义信息参与到建图、位姿估计等环节中,另一方面是端到端地完成 SLAM。针对建图的工作一方面是利用几何信息进行稠密重建,另一方面很多工作利用语义信息达到了很好的语义重建效果,三维重建、SFM。动态 SLAM 也是一个很值得研究的话题,这里不太好分类,很多工作用到了语义信息或者用来三维重建,收集的方案相对较少。优化可能是 SLAM 中最难的一部分了吧 +_+ ,一般都是直接用现成的因子图、图优化方案,要创新可不容易。

熊猫小妖的AI世界 7867

洛谷 P1032 【字串变换】

主要思想:queue+map+set 说一下读入:while(cin>>x>>y),这样就行了,按ctrl+z结束输入 首先,我们很容易想到一种做法: 用队列进行宽搜(用结构体/二维数组) map作为变换规则的储存器 set用来查重 每次在队首里找是否有能变换的部分,然后判重,入队 于是就有了以下的代码 #include<iostream> #include&...

qq_42636949的博客 445

Deep SHAP 深度学习模型的可解释性分析

Deep SHAP 算法是一种用于解释深度学习模型的技术, 该算法通过将每个特征的重要性与输出值相关联来进行解释。本博客对深度学习的模型可解释性进行了分析。

cnjs1994的博客 5119

洛谷1032 字串变换

洛谷1032 字串变换本题地址: http://www.luogu.org/problem/show?pid=1032 题目描述   已知有两个字串 A$, B$ 及一组字串变换的规则(至多6个规则):      A1$ -> B1$      A2$ -> B2$   规则的含义为:在 A$中的子串 A1$ 可以变换为 B1$、A2$ 可以变换为 B2$ …。     例如:A$

Cool_Team的专栏 602

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

洛谷 P1032 字串变换

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

aochongbi5356的博客 128

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

weixin_37253733的博客 1498

洛谷—P1032 字串变换题解

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

NCU_tanghulu的博客 480

洛谷: 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

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

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

君义NOIP的博客 863

[抄]洛谷 P1032 字串变换

字符串的stl大法

我要吃熊猫 720

洛谷 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
上一篇: <队内胡策>2017.10.18 (DP+tarjan、SPFA+字符串+脑洞、数学)
下一篇: 洛谷 1378 油滴扩展
Loi_Mapleleaf
博客等级 码龄10年 17粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值