题目传送门

我即使是死了,钉在棺材里了,也要在墓里,用这腐朽的声带喊出

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)的更多相关文章

  1. [洛谷P1032] 字串变换

    洛谷题目链接:字串变换 题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B ...

  2. 洛谷 P1032 字串变换题解

    题目链接:https://www.luogu.org/problem/P1032 题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A_1A1​ ->B_1B1​ A ...

  3. 洛谷 P1032 字串变换

    题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...

  4. 洛谷 P1032 字串变换 题解

    每日一题 day19 打卡 Analysis 广搜+map判重 用find寻找字串,再用replace替换字串 这里的map相当于正常广搜的一个book的作用 #include<iostream ...

  5. 洛谷P1032 字串变换【bfs】

    题目链接:https://www.luogu.org/problemnew/show/P1032 题意: 给定一个原字符串和目标字符串,以及几个字符串变换的规则. 问能否根据这几个规则在十步之内把原字 ...

  6. 洛谷 P1032 字串变换(map)

    题目传送门 解题思路: 搜索题,因为要求最少次数,用bfs. AC代码: #include<cstdio> #include<iostream> #include<cst ...

  7. 集训作业 洛谷P1032 字串变换

    集训的题目有点多,先写困难的绿题吧(简单的应该想想就会了) 嗯,这个题看起来像个搜索呢(就是个搜索) 我们仔细想想就知道这个题肯定不能用深搜,可以优化的地方太少了,TLE是必然的. 那我们该怎么办呢? ...

  8. 洛谷P1032 字串变换-题解

    https://www.luogu.org/problemnew/show/P1032--(题目传送) 好在数据范围很小,暴力一点也能过.思路较简单,按照所有规则,从第一位开始广搜. 注意:1.str ...

  9. luogu题解P1032字串变换--BFS+STL:string骚操作

    题目链接 https://www.luogu.org/problemnew/show/P1032 分析 这题本来很裸的一个BFS,发现其中的字符串操作好烦啊.然后就翻大佬题解发现用STL中的strin ...

随机推荐

  1. Tarjan找桥和割点与点连通分量与边连通分量【未成形】

    之前只学了个强连通Tarjan算法,然后又摸了缩点操作: 然后今天在lightoj摸了一道模板题,是求所有桥的题: 然后发现,要把:割点,割点集合,双连通,最小割边集合(桥),点连通分量,边连通分量都 ...

  2. 安装CocoaPods,ios的库安装工具

    1.需要ruby环境,mac pro自带了 2.终端输入:sudo gem install cocoapods

  3. bzoj1130:[POI2008]POD Subdivision of Kingdom

    传送门 看到数据范围这么小,不由得算了一下暴力复杂度,算出来情况一共只有1e7,不多,再乘上暴力判断的复杂度,好像T了,判断的话位运算可以方便解决 但是我写的优化似乎比较渣,还留了个log,但是还是n ...

  4. STP-5-STP配置及分析

    拓扑: root id列出了根的网桥id为两部分,前边是优先级,后边跟着mac地址,cost 0 暗示sw1就是根: 下边的命令确认sw1就是vlan1的根: 下边,sw2配置了一个比sw1更低的优先 ...

  5. jmeter diff测试(调用JAR包处理)

    1.准备接口数据(对比字段,即json数据中需要提取的key对应的值进行对比) 2.配置获取EXCEL数据 3.新建线程,并建两个http请求,分别用于请求新旧接口 4.提取需要对比的内容 5.赋值变 ...

  6. 539 Minimum Time Difference 最小时间差

    给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并已分钟数表示.示例 1:输入: ["23:59","00:00"]输出: 1 ...

  7. python语法:

    1 #开始注释,‘’‘  ‘’’可以看做是文本字符串也可以看做是块注释:”:“开始后的缩进视为一个代码块类似{}:缩进没有规定,但一般4个空格,注意:粘贴复制代码一定要检查缩进:大小写敏感: 2 数据 ...

  8. ZOJ Course Selection System DP

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5565 Course Selection System Time ...

  9. 代码review

    对于代码review个人也有些小小的看法: 1.首先我觉得我们所有开发人员要弄明白 现在Code Review 的目的 ,凡事不弄明白目的,无法做好完成一件事情,个人觉得有以下一些目的: a)可以在项 ...

  10. datetimepicker 插件位置问题解决经验

    使用dadetimepicker进行时间选择是个很不错的选择,但是美中不足的是该插件在chrome中显示弹框的时候有时会出现位置错位的现象,而在IE中则没有这种现象,视图如图1 图1 查阅了网上的资料 ...