双向bfs P1032 字串变换

news2025/1/18 13:54:11

传送门icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1032

找一个最短方案,考虑用bfs(没试过单向,但是系数很大)

更详细的解答

下面是代码理解(注释版)

// Problem: 
//     P1032 [NOIP2002 提高组] 字串变换
//   
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1032
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<iostream>
#include<string>
#include<unordered_map>//哈希表 
#include<queue>
using namespace std;
string A,B;
string a[6],b[6];//方案
int len;

int extend(queue<string>&q,unordered_map<string,int> &ha,unordered_map<string,int> 
&hb,string a[],string b[]){
	int m=q.size();//每次只扩展一层
	while(m--){
		auto t=q.front();q.pop();
		for(int i=0;i<len;++i){//枚举方案
			for(unsigned int j=0;j<t.size();++j){//枚举起始位置
				if(t.substr(j,a[i].size())==a[i]){
					string ss=t.substr(0,j)+b[i]+t.substr(j+a[i].size());//字符串
					if(ha.count(ss)) continue;//如果这里之前有跳过
					if(hb.count(ss)) return ha[t]+hb[ss]+1;//对面之前有就返回答案
					ha[ss]=ha[t]+1;//更新
					q.push(ss); //入列
				}
			}
		}
	}
	return 11;
}

int bfs(){
	unordered_map<string,int> ha,hb;
	queue<string> qa,qb;
	qa.push(A);qb.push(B);
	ha[A]=0,hb[B]=0;//别忘,不然count找不到
	int t=10;
	while(t--){
		int ans;
		if(qa.size()<qb.size()) ans=extend(qa,ha,hb,a,b);
		else ans=extend(qb,hb,ha,b,a);//反着传,因为两边对应关系不同
		if(ans<=10) return ans;
	}
	return 11;
}

int main(){
    cin>>A>>B;
    while(cin>>a[len]){
    	cin>>b[len++];//len记录个数
    }
    if(bfs()<=10) cout<<bfs()<<endl;
    else cout<<"NO ANSWER!";
	return 0;
}

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

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

相关文章

分布式学习笔记

1. CAP理论 Consistency&#xff08;一致性&#xff09;&#xff1a;用户访问分布式系统中的任意节点&#xff0c;得到的数据必须一致。 Availability&#xff08;可用性&#xff09;&#xff1a;用户访问集群中的任意健康节点&#xff0c;必须得到相应&#xff0c;而不是超时…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(一)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型&#xff0c;由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”&#xff08;そら sora&#xff09;&#xff0c;即天空之意&#xff0c;以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

svg图片构造QGraphicsSvgItem对象耗时很长的问题解决

目录 1. 问题的提出 2. 问题解决 1. 问题的提出 今天通过一张像素为141 * 214&#xff0c;大小为426KB的svg格式的图片构造QGraphicsSvgItem对象&#xff0c;再通过Qt的Graphics View Framework框架&#xff0c;将QGraphicsSvgItem对象显示到场景视图上&#xff0c;代码如下&…

用GPT-4开启“人类宝藏”

“GPT-4开启人类宝藏”意味着下面几个层面的含义&#xff1a; 知识与信息的访问&#xff1a;GPT-4作为一款强大的语言模型&#xff0c;通过学习海量的数据和信息资源&#xff0c;可以近乎实时地提供人类历史积累的知识、经验与智慧。用户可以通过询问或交互方式获取这些信息&am…

数据结构——单链表专题

目录 1. 链表的概念及结构2. 实现单链表初始化尾插头插尾删头删查找在指定位置之前插入数据在指定位置之后插入数据删除指定位之前的节点删除指定位置之后pos节点销毁链表 3. 完整代码test.cSList.h 4. 链表的分类 1. 链表的概念及结构 在顺序表中存在一定的问题&#xff1a; …

推荐彩虹知识付费商城免授权7.0源码

彩虹知识付费商城免授权7.0源码&#xff0c;最低配置环境 PHP7.2 1、上传源码到网站根目录&#xff0c;导入数据库文件&#xff1a;xydai.sql 2、修改数据库配置文件&#xff1a;/config.php 3、后台&#xff1a;/admin 账号&#xff1a;admin 密码&#xff1a;123456 4、前…

见智未来:数据可视化引领智慧城市之潮

在数字时代的浪潮中&#xff0c;数据可视化崭露头角&#xff0c;为打造智慧城市注入了强大的活力。不再被深奥的数据所束缚&#xff0c;我们通过数据可视化这一工具&#xff0c;可以更加接近智慧城市的未来。下面我就以可视化从业者的角度来简单聊聊这个话题。 数据可视化首先为…

【动态规划:最短编辑路径】的应用:excel diff功能

开篇说明 如果在这里获得过启发和思考&#xff0c;希望点赞支持&#xff01;对于内容有不同的看法欢迎来信交流。 技术栈 >> java 邮箱 >> 15673219519163.com 描述 在游戏行业中通常使用excel做配表&#xff0c;修改配表是一个频繁的操作。在修改之后&#xff…

Python next函数

在Python编程中&#xff0c;next()函数是一个非常重要且常用的内置函数&#xff0c;用于迭代器对象中获取下一个元素。迭代器是一种可以逐个访问数据元素的对象&#xff0c;例如列表、元组、字典等。本文将深入探讨Python中的next()函数&#xff0c;包括基本用法、迭代器协议、…

STM32中断定时器的使用

使用systimer来产生较为精确的定时&#xff0c;之前使用for循环来产生。 用示例工程时产生错误&#xff0c;原因是调用F103的3种容量器件&#xff0c;需要更换S汇编头函数。 另外在工程设置中&#xff0c;需要把HD设置为MD&#xff0c;重新编译即可成功。

UVa1359/LA3491 Hills

题目链接 本题是2005年ICPC亚洲区域赛杭州欧赛区的H题 题意 平面上有 n&#xff08;n≤500&#xff09;条线段&#xff0c;其中每条线段的端点都不会在其他线段上。你的任务是数一数有多少个“没有被其他线段切到”的三角形&#xff08;即小山&#xff09;。如下图所示&#x…

NS安装-CentOS服务器安装Nightscout CGM

NS CGM 安装必要条件 有自己的云服务器好像没有2&#xff0c;有云服务器就行了 安装顺序 先安装数据库&#xff0c;目前支持的是 MongoDB &#xff0c;官方推荐4&#xff0c;其实目前最新版本就行。可以用宝塔安装&#xff0c;比较简单克隆代码&#xff0c;我是放到 /opt/ns…

使用可靠的情报在危机中做出明智的决策

近年来&#xff0c;随着地缘政治威胁的增加&#xff0c;组织逐渐发现错误信息对危机时期做出关键决策的重大影响。国际 SOS 发现各种规模的企业都在努力分析危机期间 24/7 可用的大量信息&#xff0c;并使用可信来源及时提供决策信息&#xff0c;特别是为了员工的健康和安全&am…

PAM | 账户安全 | 管理

PAM PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插入式身份验证模块&#xff09;是一个灵活的身份验证系统&#xff0c;允许我们通过配置和组合各种模块来实现不同的身份验证策略。 在 Linux 或类 Unix 系统中&#xff0c;常见的 PAM 模块包括以下几种类…

[深度学习] 深入理解什么是卷积神经网络

​ &#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[深度学习] ❤️ 热门学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…

PyCharm 自动添加文件头注释

PyCharm 自动添加文件头注释 1. File and Code Templates2. Python FileReferences 1. File and Code Templates File -> Settings -> Editor -> File and Code Templates -> Python Script Reformat according to style & Enable Live Templates Created by…

悦耳的现代简约风,还可定义个性听感,森海塞尔ACCENTUM无线耳机体验

在头戴式耳机领域&#xff0c;森海塞尔本身的硬件实力确实足够出色 &#xff0c; 到了蓝牙时代 &#xff0c; 也推出了一些很有质感的产品 &#xff0c; 最近我尝试了较新的一款 ACCENTUM 耳机 &#xff0c; 它属于森海塞尔一个全新的系列 &#xff0c; 耳机本身的侧重点也很明…

PyCharm 新建目录 (directory or folder)

PyCharm 新建目录 [directory or folder] 1. 新建目录2. Enter new directory name -> OKReferences 1. 新建目录 right mouse click on the project -> New -> Directory 2. Enter new directory name -> OK ​​​ References [1] Yongqiang Cheng, https:/…

图论之dfs与bfs的练习

dfs--深度优选搜索 bfs--广度优先搜索 迷宫问题--dfs 问题&#xff1a; 给定一个n*m的二维迷宫数组其中S是起点&#xff0c;T是终点&#xff0c;*是墙壁&#xff08;无法通过&#xff09;&#xff0c; .是道路 问从起点S出发沿着上下左右四个方向走&#xff0c;能否走到T点&a…

python如何模拟登录Github

首先进入github登录页&#xff1a;https://github.com/login 输入账号密码&#xff0c;打开开发者工具&#xff0c;在Network页勾选上Preserve Log&#xff08;显示持续日志&#xff09;&#xff0c;点击登录&#xff0c;查看Session请求&#xff0c;找到其请求的URL与Form Da…