备战蓝桥杯---搜索(优化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…

android tv开发-1,leanback替代品

目录 tvapp与手机的重大不同 tvapp的焦点 dpadrecyclerview 其它开发资源与示例 leanback虽然可以简化开发流程,但国内好多设计与它不符合.有没有替代品可以用呢 tvapp与手机的重大不同 时刻需要焦点,以便告知用户现在操作点在哪里.交互略有不同,比如加载更多时应该如何页…

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

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

手机常亮屏不自动灭屏

一. 基础知识介绍 1. WakeLock&#xff08;休眠锁&#xff09; WakeLock用于保持设备的唤醒状态&#xff0c;有些情况下&#xff0c;即时用户不操作App&#xff0c;我们也需要保持屏幕处于唤醒状态&#xff0c;以保证用户体验&#xff0c;比如视频类APP和计步类APP&#xff0c;…

ChatGPT高效提问—基础知识(LM、PLM以及LLM)

ChatGPT高效提问—基础知识&#xff08;LM、PLM以及LLM&#xff09; ​ 了解语言模型&#xff08;language model, LM&#xff09;、预训练语言模型&#xff08;pre-trained language model, PLM&#xff09;和大型语言模型&#xff08;large language model, LLM&#xff09;…

Linux 系统安装Allure

要在 Linux 系统上进行离线安装 Allure 命令行工具&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 在具有互联网连接的计算机上下载 Allure 的二进制压缩包。 可以从 Allure 的官方 GitHub 仓库&#xff08;https://github.com/allure-framework/allure2/releases&…

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文件引入的方式** 二、基…

git如何将分支名由main改为master

要将分支名从 “main” 改为 “master”&#xff0c;请按照以下步骤操作&#xff1a; 首先&#xff0c;确保你已经在要重命名的分支上。通常&#xff0c;这是 “main” 分支。要检查当前分支&#xff0c;请运行以下命令&#xff1a; git branch这将显示所有本地分支&#xff…

【高质量精品】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…

鸿蒙4.0.0 安装minitouch

鸿蒙4.0.0 安装minitouch ubuntu 系统 minitouch 地址 https://github.com/DeviceFarmer/minitouch 因为 鸿蒙4.0.0 对应安卓12 API版本31 所以启动 minitouch 需要 STFService 地址 https://github.com/openstf/STFService.apk 到release下载最新的STFService.apk &…

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

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

C系列-柔性数组

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

vue学习——集成sass

安装 pnpm i sass sass-loader -D在vite.config.ts文件配置: export default defineConfig({css: {preprocessorOptions: {scss: {javascriptEnabled: true,additionalData: import "./src/styles/variable.scss";,},},},} }创建三个文件 src/styles/index.scss //…

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 注意…