备战蓝桥杯---搜索(优化1)

显然,我们可以用BFS解决,具体实现与八数码类似:

下面是代码:

#include<bits/stdc++.h>
using namespace std;
#define N 3000000
string a,b;
int hh,dis[N],cnt;
struct node{string u,v;
}bian[7];
map<string,int> mp;
string huan[N];
queue<int> q;
int bfs(string a,string b){mp[a]=1;huan[++cnt]=a;dis[cnt]=0;q.push(cnt);while(!q.empty()){int tmp=q.front();q.pop();if(dis[tmp]==10) return 0;string now=huan[tmp];for(int i=1;i<=hh;i++){for(int j=0;j<now.length();){string nxt=now;int pos=now.find(bian[i].u,j);if(pos<0&&pos>=now.length()) break;j=pos+1;nxt.erase(pos,bian[i].u.length());nxt.insert(pos,bian[i].v);if(mp.find(nxt)!=mp.end()) continue;if(nxt.length()>20) continue;dis[++cnt]=dis[tmp]+1;mp[nxt]=cnt;huan[cnt]=nxt;q.push(cnt);if(nxt==b) return dis[cnt];}}}return 0;
}
int main(){cin>>a>>b;while(cin>>bian[++hh].u>>bian[hh].v) ;int u=bfs(a,b);if(!u) cout<<"NO ANSWER!";else cout<<u;
}

结果只过了87.5的数据(qaq)

实际上,这题虽然说只有6种变换法则,但是如果给的字符串恶心一点(比如适用同一法则的pos位置有很多,那么它的复杂度铁定远大于6^10,于是我们可以优化一下:

我们可以先从头变换5次,再从尾变换5次,然后对两组dis进行拼接。这样就把6^10降成了6^5*2。

下面为AC代码:

#include<bits/stdc++.h>
using namespace std;
#define N 1000000
string a,b;
int hh,disA[N],cnt,disB[N];
struct node{string u,v;
}bian[7];
map<string,int> mp;
string huan[N];
queue<int> q;
int bfs(string a,string b,int y,int dis[]){while(!q.empty()) q.pop();mp[a]=++cnt;huan[cnt]=a;dis[cnt]=0;q.push(cnt);while(!q.empty()){int tmp=q.front();q.pop();if(dis[tmp]==5) return 0;string now=huan[tmp];for(int i=1;i<=hh;i++){for(int j=0;j<now.length();){string nxt=now;if(y==1){int pos=now.find(bian[i].u,j);if(pos<0&&pos>=now.length()) break;j=pos+1;nxt.erase(pos,bian[i].u.length());nxt.insert(pos,bian[i].v);}if(y==0){int pos=now.find(bian[i].v,j);if(pos<0&&pos>=now.length()) break;j=pos+1;nxt.erase(pos,bian[i].v.length());nxt.insert(pos,bian[i].u);}   if(nxt.length()>20) continue;if(mp.find(nxt)!=mp.end()&&dis[mp[nxt]]!=-1) continue;if(mp.find(nxt)==mp.end()){dis[++cnt]=dis[tmp]+1;mp[nxt]=cnt;huan[cnt]=nxt;q.push(cnt);}else{dis[mp[nxt]]=dis[tmp]+1;q.push(mp[nxt]);}}}}return 0;
}
int main(){cin>>a>>b;while(cin>>bian[++hh].u>>bian[hh].v) ;memset(disA,-1,sizeof(disA));memset(disB,-1,sizeof(disB));bfs(a,b,1,disA);bfs(b,a,0,disB);int min1=11;for(int i=1;i<=cnt;i++){if(disA[i]!=-1&&disB[i]!=-1)min1=min(min1,disA[i]+disB[i]);}if(min1>10) cout<<"NO ANSWER!";else cout<<min1;
}

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

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

相关文章

Python爬虫requests库详解

使用 requests 上一节中&#xff0c;我们了解了 urllib 的基本用法&#xff0c;但是其中确实有不方便的地方&#xff0c;比如处理网页验证和 Cookies 时&#xff0c;需要写 Opener 和 Handler 来处理。为了更加方便地实现这些操作&#xff0c;就有了更为强大的库 requests&…

docker 网络模型

一、docker的网络模型分为四种 【1】Host(与宿主机共享一个网络)&#xff0c;宿主机的localhost 及 容器内的localhost 【2】Bridge(与宿主机共享一个局域网&#xff0c;有自己的网络&#xff1b;docker运行默认Bridge)&#xff1b;容器内localhost不是宿主机localhost 【3】…

【CSS + ElementUI】更改 el-carousel 指示器样式且隐藏左右箭头

需求 前三条数据以走马灯形式展现&#xff0c;指示器 hover 时可以切换到对应内容 实现 <template><div v-loading"latestLoading"><div class"upload-first" v-show"latestThreeList.length > 0"><el-carousel ind…

双非本科准备秋招(16.1)—— 力扣二叉树

1、101. 对称二叉树 检查是否对称&#xff0c;其实就是检查左节点等不等于右节点&#xff0c;我们可以用递归来做。 如果左右节点都为null&#xff0c;说明肯定对称呀&#xff0c;返回true。 如果一个为null一个不为null&#xff0c;或者左右的值不相等&#xff0c;则为false。…

flutter开发实战-ijkplayer视频播放器功能

flutter开发实战-ijkplayer视频播放器功能 使用better_player播放器进行播放视频时候&#xff0c;在Android上会出现解码失败的问题&#xff0c;better_player使用的是video_player&#xff0c;video_player很多视频无法解码。最终采用ijkplayer播放器插件&#xff0c;在flutt…

3D力导向树插件-3d-force-graph学习001

一、引入文件&#xff1a;下载静态js文件引入 1、**以vue项目测试&#xff0c;在index.html文件中引入静态文件&#xff08;js文件可在官网下载&#xff09;** 2、**也曾尝试用npm包下载引入的方法&#xff0c;总是会有报错&#xff0c;所以采用静态js文件引入的方式** 二、基…

【高质量精品】2024美赛B题22页word版高质量半成品论文+多版保奖思路+数据+前四问思路代码等(后续会更新)

一定要点击文末的卡片&#xff0c;进入后&#xff0c;获取完整论文&#xff01;&#xff01; B 题整体模型构建 1. 潜水器动力系统失效&#xff1a;模型需要考虑潜水器在无推进力情况下的行为。 2. 失去与主船通信&#xff1a;考虑无法从主船接收指令或发送位置信息的情况。…

【AIGC核心技术剖析】DreamCraft3D一种层次化的3D内容生成方法

DreamCraft3D是一种用于生成高保真、连贯3D对象的层次化3D内容生成方法。它利用2D参考图像引导几何塑造和纹理增强阶段&#xff0c;通过视角相关扩散模型执行得分蒸馏采样&#xff0c;解决了现有方法中存在的一致性问题。使用Bootstrapped Score Distillation来提高纹理&#x…

LabVIEW与EtherCAT实现风洞安全联锁及状态监测

LabVIEW与EtherCAT实现风洞安全联锁及状态监测 在现代风洞试验中&#xff0c;安全联锁与状态监测系统发挥着至关重要的作用&#xff0c;确保了试验过程的安全性与高效性。介绍了一套基于EtherCAT总线技术和LabVIEW软件开发的风洞安全联锁及状态监测系统。该系统通过实时、可靠…

jmeter-04创建请求

文章目录 一、发送请求-查看响应流程二、新建请求三、选择请求方式&#xff0c;填写url1.发送get请求当只有请求方式不一样的时候&#xff0c;参数都填写在参数栏里面&#xff0c;GET请求与POST请求的区别&#xff1f; 2.发送post请求2.1 application/x-www-form-urlencoded2.2…

基于深度学习的SSVEP分类算法简介

基于深度学习的SSVEP分类算法简介 1、目标与范畴2、深度学习的算法介绍3、参考文献 1、目标与范畴 稳态视觉诱发电位&#xff08;SSVEP&#xff09;是指当受试者持续注视固定频率的闪光或翻转刺激时&#xff0c;在大脑枕-额叶区域诱发的与刺激频率相关的电生理信号。与P300、运…

C系列-柔性数组

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 ​编辑 柔性数组 柔性数组的特点 柔性数组的使用 柔性数组的优势 柔性数组 也许你从来没有听说过柔性数组这个概念&#xff0c;但是它确实是存在的&#xff0c;C99中&#…

PyTorch 2.2 中文官方教程(十八)

开始使用完全分片数据并行&#xff08;FSDP&#xff09; 原文&#xff1a;pytorch.org/tutorials/intermediate/FSDP_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Hamid Shojanazeri&#xff0c;Yanli Zhao&#xff0c;Shen Li 注意…

Hudi学习 6:Hudi使用

准备工作&#xff1a; 1.安装hdfs https://mp.csdn.net/mp_blog/creation/editor/109689143 2.安装spark spark学习4&#xff1a;spark安装_hzp666的博客-CSDN博客 3.安装Scala Hudi学习6&#xff1a;安装和基本操作_hzp666的博客-CSDN博客 spark-shell 写入和读取hudi 2.…

python常用pandas函数nlargest / nsmallest及其手动实现

目录 pandas库 Series和DataFrame nlargest和nsmallest 用法示例 代替方法 手动实现 模拟代码 pandas库 是Python中一个非常强大的数据处理库,提供了高效的数据分析方法和数据结构。它特别适用于处理具有关系型数据或带标签数据的情况,同时在时间序列分析方面也有着出…

基于springboot地方美食分享网站源码和论文

基于springboot地方美食分享网站源码和论文361 首先&#xff0c;论文一开始便是清楚的论述了系统的研究内容。其次&#xff0c;剖析系统需求分析&#xff0c;弄明白“做什么”&#xff0c;分析包括业务分析和业务流程的分析以及用例分析&#xff0c;更进一步明确系统的需求。然…

嵌入式中经典面试题分析

1.关键字static的作用是什么&#xff1f;为什么static变量只初始化一次&#xff1f; 1&#xff09;修饰局部变量&#xff1a;使得变量变成静态变量&#xff0c;存储在静态区&#xff0c;存储在静态区的数据周期和程序相同&#xff0c; 在main函数开始前初始化&#xff0c;在退…

7min到40s:SpringBoot 启动优化实践!

目录 背景 1 耗时问题排查 1.1 观察 SpringBoot 启动 run 方法 1.2 监控 Bean 注入耗时 2 优化方案 2.1 如何解决扫描路径过多&#xff1f; 2.2 如何解决 Bean 初始化高耗时&#xff1f; 3 新的问题 3.1 SpringBoot 自动化装配&#xff0c;让人防不胜防 3.2 使用 sta…

泡泡清新文艺的微社区系统PHP源码

泡泡微社区&#xff0c;小巧而强大&#xff0c;为您带来卓越的社区交流体验。 凭借GoZinc的先进架构&#xff0c;泡泡在保持轻盈身姿的同时&#xff0c;功能一应俱全。前端采用Vue3匠心打造&#xff0c;界面清新简约&#xff0c;三栏式布局仿若Twitter&#xff0c;让您一见倾心…

四、Redis之配置文件

redis配置文件的名称 redis.conf 通过命令 find / -name redis.confvim redis.conf通过 : set nu 设置行号: set nonu 取消行号/关键字 搜索关键字: set noh 取消高亮选择4.1 Units 配置大小单位&#xff0c;开头定义了一些基本的度量单位&#xff0c;只支持 bytes&#…