P1032 [NOIP2002 提高组] 字串变换

题目描述

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

  • 1A1​→B1​。
  • A2​→B2​。

规则的含义为:在 A 中的子串 A1​ 可以变换为 B1​,A2​ 可以变换为 B2​⋯。

例如:A=abcd,B=xyz,

变换规则为:

  • abc→xu,ud→y,y→yz。

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

  • abcd→xud→xy→xyz。

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

输入格式

第一行有两个字符串 A,B。

接下来若干行,每行有两个字符串 Ai​,Bi​,表示一条变换规则。

输出格式

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

输入输出样例

输入 #1复制

abcd xyz
abc xu
ud y
y yz

输出 #1复制

3

说明/提示

对于 100%100% 数据,保证所有字符串长度的上限为 2020。

【题目来源】

NOIP 2002 提高组第二题

解析:

使用双端队列可以极小的减少搜索范围:

注意逆向的时候是从后变到前的。

#include <iostream>
#include <algorithm>
#include <queue>
#include <map>
#include<cstring>using namespace std;
//双端队列 +  map记录已走过的步数  
queue<string> q1,q2;
string A,B;
string a1[10],a2[10];
int n = 0;
int expand(queue<string>& q,map<string,int>& m1,map<string,int>& m2,string a1[],string a2[])
{string t = q.front();q.pop();for(int i = 0;i < t.size();i++){for(int j = 0;j < n;j++){if(t.substr(i,a1[j].size()) == a1[j]){string s1 = t.substr(0,i) + a2[j] + t.substr(i+a1[j].size()); // 变成下一个字符 if(m1.count(s1)) continue;if(m2.count(s1))  return m1[t]+1+m2[s1];m1[s1] = m1[t]+1;q.push(s1);}}}return 11;
}
int bfs()
{map<string,int> m1,m2;q1.push(A),m1[A] = 0;q2.push(B),m2[B] = 0;while(q1.size() && q2.size()) // 有断层 {int t;// 每次扩展元素少的  if(q1.size() < q2.size()) t = expand(q1,m1,m2,a1,a2);else t = expand(q2,m2,m1,a2,a1);if(t  <= 10) return t; }return 11;
}
int main()
{cin >> A >> B;while(cin >> a1[n] >> a2[n]) n++;
//	for(int i = 0;i < 3;i++)
//	{
//		cin >> a1[i] >> a2[i];
//	}
//	n = 3;if(A == B){cout << "0";return 0;		}		int step = bfs();if(step > 10)cout <<"NO ANSWER!"<<endl;else{cout << step<<endl;} return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据导出Excel

1、针对大数据导出到excel&#xff0c;动态生成datatable数据集 DataTable dt new DataTable(); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Age", typeof(string)); for (int i 0; i &…

华为“纯血”鸿蒙加速进场 高校、企业瞄准生态开发新风口

近日&#xff0c;华为终端BG CEO、智能汽车解决方案BU董事长余承东在2024年新年信中提出&#xff0c;开启华为终端未来大发展的新十年。 他特别提到&#xff0c;未来要构建强大的鸿蒙生态&#xff0c;2024年是原生鸿蒙的关键一年&#xff0c;将加快推进各类鸿蒙原生应用的开发…

flask web学习之表单(一)

文章目录 一、使用Flask-WTF处理表单1.1 安装Flask-WTF库1.2 定义WTForms表单类常用的WTForm字段实例化字段类常用参数常用的WTForm验证器 1.3 输出HTML代码使用render_kw属性在调用字段时传入 1.4 在模板中渲染表单 在web程序中&#xff0c;表单是用户交互最常见的方式之一。用…

CSS3中transform2D变形详解

CSS3变形 在CSS3中&#xff0c;动画效果包括3个部分&#xff1a; 变形(transform)过渡(transition)动画(animation) 在实际开发中&#xff0c;有时需要实现元素的各种变形效果&#xff0c;如平移&#xff0c;缩放&#xff0c;旋转&#xff0c;倾斜等。 在CSS3中&#xff0c…

Zetta Decision API连接,提升电商平台营销系统效率

高效无代码开发连接电商与客服系统 在电商和客户服务系统的运营中&#xff0c;有效的连接和数据集成是至关重要的。Zetta Decision提供了一种无需传统API开发就能实现系统连接的解决方案&#xff0c;这对于希望快速整合多个平台和服务的电商企业尤其重要。通过Zetta Decision&…

基于自适应遗传算法的车间调度matlab仿真,可以任意调整工件数和机器数,输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 编码与初始化 4.2 适应度函数 4.3 遗传操作 4.4 自适应机制 4.5 终止条件 5.完整程序 1.程序功能描述 基于自适应遗传算法的车间调度matlab仿真,可以任意调整工件数和机器数,输出甘…

Linux基础配置

文章目录 说明1.安装 ifconfig 和 vim 命令2.设置root密码3.设置允许root用户密码登录4.网络配置5.设置时间同步6.关闭防火墙7.主机名与IP地址的映射 说明 配置基于ubuntu22版本,当前unbuntu18适用,后续安装持续更新 1.安装 ifconfig 和 vim 命令 sudo apt install net-tool…

[渗透测试学习] Crocodile - HackTheBox

文章目录 靶机:CrocodileTask1Task2Task3Task4Task5Task6Task7Task8Task9Task10靶机:Crocodile 考察的是FTP传输协议相关知识 Task1 问题:在扫描过程中,什么NMAP扫描开关使用默认脚本? -sCTask2 问题

web学习笔记(十四)

目录 1.数组 1.1数组的概念 1.2数组的创建 1.3数组的索引和获取 1.4数组的遍历、长度和检测数据类型 1.5数组的操作 1.6深拷贝和浅拷贝 2.数组常用的方法&#xff08;重点&#xff09;&#xff1a; 2.1常用方法汇总 2.2 补充&#xff1a; 1.数组 1.1数组的概念 数组是…

【STM32】HAL库的STOP低功耗模式UART串口唤醒BUG,第一个接收字节出错的问题(尚未解决,疑难杂症)

【STM32】HAL库的STOP低功耗模式UART串口唤醒BUG&#xff0c;第一个接收字节出错的问题&#xff08;尚未解决&#xff0c;疑难杂症&#xff09; 文章目录 BUG复现调试代码推测原因及改进方案尝试中断时钟供电外设唤醒方式校验码硬件问题 切换到STOP0模式尝试最终结论和猜想附录…

[SpringBoot]如何在一个普通类中获取一个Bean

最近在项目中出现了一个这种情况&#xff1a;我一顿操作猛如虎的写了好几个设计模式&#xff0c;然后在设计模式中的类中想将数据插入数据库&#xff0c;因此调用Mapper持久层&#xff0c;但是数据怎么都写不进去&#xff0c;在我一顿操作猛如虎的查找下&#xff0c;发现在普通…

在WindowsServer2012中部署war项目

目录 前言 一.jdk安装 二.Tomact安装 三.MySQL安装 ​编辑​编辑​编辑​编辑​编辑​编辑​编辑 四.开放端口号 MySQL开放端口号 Tomact开放端口号 ​编辑 五.项目部署 1.将war放置在tomact中 2.配置项目sql脚本 3.最终效果 前言 安装Java开发工具包&#xff08…

【libpcap】获取报文pcap的ns级别的时间戳

1.安装libpcap 首先&#xff0c;下载最新的 libpcap 源代码。你可以从 tcpdump.org 获取最新版本 1 解压下载的libpcap tar -zxvf libpcap-version.tar.gz 2 进入解压目录进行安装 cd libpcap-version ./configure make sudo make install2 解析报文时间戳 #include <pca…

力扣 2707.字符串中的额外字符(动态规划)

力扣 2707.字符串中的额外字符 动态规划 f[0] 0; s字符串长度为n&#xff0c;求f[n] f[n] ((f[n - 1] 1) < f[j : n]) ? (f[n - 1] 1) : f[j : n]; (其中 j < n) 其中f[j : n]为字符串第j位到第n位&#xff0c;这里需要满足f[j : n]为字典中所出现的字符串 因此&…

Linux进阶命令使用

在 Linux 中&#xff0c;除了常用的基础命令&#xff0c;有一系列进阶命令可以帮助用户更有效地管理系统和执行复杂的任务。以下是一些常见的 Linux 进阶命令及其用法&#xff1a; 文本处理 grep&#xff1a;搜索文本并打印匹配的行。 grep pattern filenameawk&#xff1a;用…

Fancy

专门记录一点思维题。 1. 反转与双端队列&#xff1a;LC 2810 故障键盘 这题是个easy&#xff0c;但用StringBuilder强行模拟反转就没意思了。 可以这么想&#xff0c;当打出一个i&#xff0c;代表一个控制信号&#xff0c;反转。 一开始我们向队列尾部&#xff08;屏幕上的…

SpringMVC 学习博客记录

文章目录 Servlet请求转发和请求包含RequestDispatcher HandlerInterceptor组件实际运用场景 HandlerMapping&RequestMappingInfo(HandlerMapping)HandlerExecutionChainHandlerAdapter源码学习知识点博客记录 Servlet请求转发和请求包含 RequestDispatcher Request#getR…

文件上传进阶绕过技巧(一)和靶场实战

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 0、环境准备 请移步《文件上传靶场实战&#xff1a;upl…

数据库的数据会存到文件中

数据库的数据会存到文件中。文件就是操作系统对磁盘block的映射。 文件/块在开头有元数据&#xff0c;包含eof的位置&#xff0c;recode的数量&#xff0c;每个recode的长度。 聚集索引和数据放在一起&#xff0c;索引就是数据主键。 而非聚集索引在另一个地址中单独存储&…

从零学Java 泛型

Java 泛型 文章目录 Java 泛型1 什么是泛型?2 泛型类3 泛型接口4 泛型方法5 泛型集合 Collection 工具类 1 什么是泛型? Java泛型是JDK1.5中引入的一个新特性&#xff0c;其本质是参数化类型&#xff0c;把类型作为参数传递。 常见形式有泛型类、泛型接口、泛型方法。 语法…