牛客:[NOIP2002]字串变换(双向bfs)

devtools/2024/10/11 0:22:42/

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

已知有两个字串 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

abcd xyz
abc xu
ud y
y yz

输出

复制3

3

做法

#include<bits/stdc++.h>
using namespace std;
string s,t,a[10],b[10];
int n;
queue<string> q1,q2;
unordered_map<string,int> mp1,mp2;
int bfs(){int step=0;q1.push(s);q2.push(t);mp1[s]=0;mp2[t]=0;while(++step<=5){ while(mp1[q1.front()]==step-1){//上一层的string tmp=q1.front();q1.pop();for(int i=0;i<n;i++){int pos=0;while(pos<tmp.size()){string ss=tmp;if(ss.find(a[i],pos)==-1) break;//子串没有包含a[i]ss.replace(ss.find(a[i],pos),a[i].size(),b[i]);//注意起始点if(mp1.find(ss)!=mp1.end()) {pos++;continue;//搜过了}if(mp2.find(ss)!=mp2.end()) return step*2-1;//会合,当前这步不算q1.push(ss);mp1[ss]=step;pos++;}}}while(mp2[q2.front()]==step-1){string tmp=q2.front();q2.pop();for(int i=0;i<n;i++){int pos=0;while(pos<tmp.size()){string ss=tmp;if(ss.find(b[i],pos)==-1) break;ss.replace(ss.find(b[i],pos),b[i].size(),a[i]);if(mp2.find(ss)!=mp2.end()) {pos++;continue;//搜过了}if(mp1.find(ss)!=mp1.end()) return step*2;mp2[ss]=step;q2.push(ss);pos++;}}}}return -1;
}
int main(){cin>>s>>t;while(cin>>a[n]>>b[n]) n++;int ans=bfs();if(ans==-1) cout<<"NO ANSWER!";else cout<<ans;
}


http://www.ppmy.cn/devtools/123894.html

相关文章

Wasserstein距离

Wasserstein距离&#xff08;Wasserstein distance&#xff09;&#xff0c;又称为推土机移动距离&#xff08;Earth Mover’s Distance, EMD&#xff09;&#xff0c;是度量理论中用来比较两个概率分布之间差异的一种距离度量。它源自最优传输问题&#xff08;Optimal Transpo…

基于Springboot+VUE的二手奢侈品商城的设计与实现

一、摘要 当前&#xff0c;二手奢侈品市场持续蓬勃发展&#xff0c;吸引了越来越多的消费者。然而&#xff0c;现有的二手奢侈品交易平台在用户体验、安全性和功能方面仍存在一些问题&#xff0c;需要进一步改进。本研究旨在设计和实现一种基于Spring Boot 和 Vue 技术框架的二…

(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第5关---XTuner 微调个人小助手认知

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频&#xff1a;https://www.bilibili.com/video/BV1tz421B72y/ 课程文档&#xff1a; https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/XTuner 关…

C语言练习

题目: 1.如果在int型变量的声明中为变量赋一个实数值(如3.12或4.6)的初始值会怎样呢&#xff1f;请打一段代码来看看 分析&#xff1a;……不用分析&#xff0c;开个玩笑&#xff0c;虽然很简单但是还是按照惯例水上一波数字 1.首先按照题目要求用函数类型int整型给变量赋值…

JUC-CompletableFuture

1. CompletableFuture 简介 JUC 中提供的一个实现异步编程的工具类。实现了 Future 和 CompletionStage 两个接口&#xff0c;主要用作于创建&#xff0c;组合&#xff0c;处理多个异步任务核心思想是 异步任务的链式处理 2. CompletableFuture 与 Future 的区别 传统的 Fut…

【解决】虚拟机VMTool安装程序无法继续,Microsoft Runtime DLL安装程序未能完成安装

这个问题的原因是系统安装服务没有开启 打开任务管理器-服务-打开服务 找到windows installer 服务&#xff0c;开启即可

CMakeLists.txt关键字查漏补缺

target_link_libraries 用于指定目标&#xff08;如可执行文件或库&#xff09;要链接的库 cmake_minimum_required(VERSION 3.10)# 设置项目名称 project(my_project)# 添加可执行文件 add_executable(my_executable main.cpp)# 链接外部库 target_link_libraries(my_executa…

FreeRTOS学习总结

背景&#xff1a;在裸机开发上&#xff0c;有时候我们需要等待某个信号或者需要延迟时&#xff0c;CPU的运算是白白浪费掉了的&#xff0c;CPU的利用率并不高&#xff0c;我们希望当一个函数在等待的时候&#xff0c;可以去执行其他内容&#xff0c;提高CPU的效率&#xff0c;同…