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

embedded/2024/10/10 23:27:06/

链接:登录—专业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/embedded/125598.html

相关文章

网络接入的镜像模式和串接模式

网络接入的镜像模式和串接模式主要有以下特点&#xff1a; 一、镜像模式 1. 工作原理 - 镜像模式也称为端口镜像&#xff0c;是将网络中指定端口的数据流量复制一份到另一个监测端口&#xff0c;以便进行网络分析、故障排查和安全监控等。例如&#xff0c;将连接重要服务器…

CDAM数据资产管理的策略制定与落地

在当今数字化时代&#xff0c;数据已成为企业最宝贵的资产之一&#xff0c;其质量和价值直接关系到企业的决策效率和市场竞争力。因此&#xff0c;数据资产管理成为企业不可忽视的重要议题。本文将探讨数据资产管理的策略制定与落地过程&#xff0c;以期为企业提供实践指导。 一…

APP的命令和monkey压力测试

一、命令的使用&#xff1a; 1.dos下链接&#xff1a;adb connect 127.0.0.1:62001 2.所附设备清单&#xff1a;adb devices device:已识别的设备&#xff0c;表示连接成功 unauthorized:没有授权需要手机授权才能连接 unkown:未识别设备 offline:离线设备 3.版本&#xff1a;…

刷题 链表

面试经典150题 - 链表 141. 环形链表 class Solution { public:bool hasCycle(ListNode *head) {ListNode* slow head, *fast head;while (fast ! nullptr && fast->next ! nullptr) {slow slow->next;fast fast->next->next;if (slow fast) {return…

新个性化时尚解决方案!Prompt2Fashion:自动生成多风格、类型时尚图像数据集。

今天给大家介绍一种自动化生成时尚图像数据的方法Prompt2Fashion。 首先创建了一组描述&#xff0c;比如“适合婚礼的休闲风格服装”&#xff0c;然后用这些描述来指导计算机生成图像。具体来说&#xff0c;他们使用了大型语言模型来写出这些服装的描述&#xff0c;接着将这些描…

音频进阶学习三——离散时间信号与系统

文章目录 前言一、离散时间信号1.基本信号2.离散时间信号的分类3.离散时间信号的简单运算4.单位脉冲在运算中的作用 二、离散时间系统1.什么是离散时间系统2.离散系统的分类 总结 前言 前面博主介绍了信号中的连续时间信号和离散时间信号&#xff0c;数字信号也是离散时间信号…

python 实现Tarjan 用于在有向图中查找强连通分量的算法

Tarjan 用于在有向图中查找强连通分量的算法介绍 Tarjan算法是一种用于在有向图中查找强连通分量的高效算法&#xff0c;由Robert Tarjan在1972年提出。强连通分量是指在有向图中&#xff0c;如果从顶点u到顶点v以及从顶点v到顶点u都存在一条路径&#xff0c;那么顶点u和顶点v…

mysql迁移到达梦数据库报错:参数不兼容

1: 这个错误可能是某个字段‘定义超长’&#xff0c;尝试&#xff1a; 2: 如果还报错&#xff0c;指定和mysql同版本驱动