洛谷 P1032 字串变换 (BFS)
题目传送门
我即使是死了,钉在棺材里了,也要在墓里,用这腐朽的声带喊出
STL大法好
这题最麻烦的其实是处理字符串,真正的搜索部分我个人认为也就只有橙题或黄题的难度。而处理字符串,正如前面所说,STL大法好!虽然也有好多人用了STL,但我个人认为我的更精巧一些(各位dalao不要打我 ~(>_<。)\ )
用STL实现替换是这样的:
string repl(int be,string x,string y,string z) //将字符串x从be位置开始的第一个子串y替换成z,如果子串y不被x包含,则返回x
{
int pos=x.find(y,be); //寻找子串y在x中的位置,如果不存在,返回-1
if(pos>=0) //如果y存在,则进行替换操作
x=x.replace(pos,y.size(),z); //将x在pos位置的长度为y.size的串(也就是y)替换成z
return x; //返回更改后的字符串
}
用STL实现的判重是这样的:
map <string,bool> vis;
这样再进行广搜寻找最优解就方便得多了。由于广搜实现起来很简单,就不单独解释了,直接上完整代码。
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
struct yyy{
string f,
t;
}rule[10]; //存变换规则
struct hhh{
string now;
int st;
}q[10001]; //模拟队列,now是当前的字串,st是步数
int h=1,t;
map<string,bool> vis; //map查重
string repl(int be,string x,string y,string z) //替换子串,前面已经讲过了
{
int pos=x.find(y,be);
if(pos>=0)
x=x.replace(pos,y.size(),z);
return x;
}
int main()
{
//输入
string a,b; int n=0;
cin>>a>>b;
while(cin>>rule[++n].f&&cin>>rule[n].t)
//搜索
q[++t].now=a;
vis[a]=1;
while(h<=t)
{
for(int i=1;i<=n;i++)
{
for(int j=0;j<q[h].now.size();j++)
{
string x=repl(j,q[h].now,rule[i].f,rule[i].t);
if(x==b)
{
cout<<q[h].st+1;
return 0;
}
if(!vis[x]&&q[h].st+1<=10)
{
vis[x]=1;
q[++t].now=x; q[t].st=q[h].st+1;
}
}
}
h++;
}
cout<<"NO ANSWER!";
return 0;
}
洛谷 P1032 字串变换 (BFS)的更多相关文章
- [洛谷P1032] 字串变换
洛谷题目链接:字串变换 题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B ...
- 洛谷 P1032 字串变换题解
题目链接:https://www.luogu.org/problem/P1032 题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A_1A1 ->B_1B1 A ...
- 洛谷 P1032 字串变换
题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...
- 洛谷 P1032 字串变换 题解
每日一题 day19 打卡 Analysis 广搜+map判重 用find寻找字串,再用replace替换字串 这里的map相当于正常广搜的一个book的作用 #include<iostream ...
- 洛谷P1032 字串变换【bfs】
题目链接:https://www.luogu.org/problemnew/show/P1032 题意: 给定一个原字符串和目标字符串,以及几个字符串变换的规则. 问能否根据这几个规则在十步之内把原字 ...
- 洛谷 P1032 字串变换(map)
题目传送门 解题思路: 搜索题,因为要求最少次数,用bfs. AC代码: #include<cstdio> #include<iostream> #include<cst ...
- 集训作业 洛谷P1032 字串变换
集训的题目有点多,先写困难的绿题吧(简单的应该想想就会了) 嗯,这个题看起来像个搜索呢(就是个搜索) 我们仔细想想就知道这个题肯定不能用深搜,可以优化的地方太少了,TLE是必然的. 那我们该怎么办呢? ...
- 洛谷P1032 字串变换-题解
https://www.luogu.org/problemnew/show/P1032--(题目传送) 好在数据范围很小,暴力一点也能过.思路较简单,按照所有规则,从第一位开始广搜. 注意:1.str ...
- luogu题解P1032字串变换--BFS+STL:string骚操作
题目链接 https://www.luogu.org/problemnew/show/P1032 分析 这题本来很裸的一个BFS,发现其中的字符串操作好烦啊.然后就翻大佬题解发现用STL中的strin ...
随机推荐
- C#获得当前执行的函数名、当前代码行、源代码文件名
http://blog.csdn.net/newegg2009/article/details/6220385 C#获得当前执行的函数名.当前代码行.源代码文件名 [日期:2010-10-18 11: ...
- Mecanim动画系统 - 在角色上使用Mask 叠加动画层
http://www.narkii.com/club/thread-305706-1.html 2013-10-9 01:15 上传 下载附件 (78.65 KB) 导读:五分钟了解Mecanim角色 ...
- PJzhang:百度网盘是如何泄露公司机密的?
猫宁!!! 参考链接:https://mp.weixin.qq.com/s/PLELMu8cVleOLlwRAAYPVg 百度网盘在中国一家独大,百度超级会员具有很多特权,尤其是在下载速度上,是普通会 ...
- AttributedString 图片间距问题
1.NSMutableAttributedString如何显示图片 NSMutableAttributedString *vipStr = [[NSMutableAttributedString al ...
- File upload in ASP.NET Core web API
参考1:File upload in ASP.NET Core web API https://www.janaks.com.np/file-upload-asp-net-core-web-api/ ...
- 集合:set
set 就是数学上的集合——每个元素最多只出现一次.和sort一样,自定义一个类型也可以构造set ,但是必须定义“小于”运算符. 例子: 输入一个文本,找出所有不同的单词(连续的字母序列),按字典从 ...
- python入门之装饰器
入门原理: 一系列函数要做相同的修改,在这些函数执行之前做的操作,或者在执行之后做的操作都可以在一个装饰器(函数)里修改 作用: 在不改变原函数的情况下,对原函数的操作前或者操作后做些改变,这就是装饰 ...
- 083 Remove Duplicates from Sorted List 有序链表中删除重复的结点
给定一个排序链表,删除所有重复的元素使得每个元素只留下一个.案例:给定 1->1->2,返回 1->2给定 1->1->2->3->3,返回 1->2- ...
- Unity Shader入门精要学习笔记 - 第5章 开始 Unity Shader 学习之旅
一个顶点/片元 着色器的结构大概如下: Shader "MyShaderName" { Properties { //属性 } SubShader { //针对显卡A的SubSha ...
- 我的NopCommerce之旅(4): 定时任务之邮件
一.功能简介 用户购买物品生成订单后,系统将发送邮件提醒给用户 二.操作步骤 后台配置一个系统的默认发送邮箱 启动定时任务,这里包括多个任务,只需要启动邮件任务 查看邮件发送情况 三.数据库分析 [d ...