洛谷 P1032 子串变换
题目链接 https://www.luogu.org/problemnew/show/P1032
本题是一道bfs问题,从a串开始,每一步完成替换一对字符串(但是一个一步替换可以将这对字符串替换好几次,比如a串是 ABCABCABCABC 一对替换是BC替换成ED,那么一步替换是将 ABCABCABCABC 替换成 AEDAEDAEDAED )如果十步以内转换成b就输出
本题还让蒟蒻学习了一下map的用法 真的十分好用 c++的stl真是A题利器
具体放代码吧:
#include<bits/stdc++.h> using namespace std; string a,b;
string sa[],sb[];
map<string,int>maps; //用来判重,达到剪枝的效果
queue<string>q; //用来存转换出的字符串
queue<int>nq; //存当前的步数
int n,k=-; void bfs()
{
int i;
while(!q.empty())
{
if(nq.front()>) //超过十步,跳出循环
break;
if(q.front()==b)
{
k=nq.front(); //到了b就更新k 跳出
break;
}
if(maps[q.front()]==) //如果当前的字符串搜索过,就pop掉 别忘了continue!
{
q.pop();
nq.pop();
continue;
}
maps[q.front()]=; //没有的话就标记上 起到剪枝的效果 for(i=;i<n;i++)
{
string s=q.front(),ss;
while()
{
int m=s.find(sa[i]); //寻找第一次出现sa[i]的位置
if(m==-) //找不到 说明能和sa[i]换的都换了 跳出while循环
break;
ss=q.front();
ss.replace(m,sa[i].size(),sb[i]);
q.push(ss);
nq.push(nq.front()+);
s[m]='#'; //将匹配的地方替换成一个不相关的字符,这样就可以找到下一个匹配的地方
}
}
q.pop();
nq.pop();
}
if(k==-)
cout<<"NO ANSWER!";
else
cout<<k;
} int main()
{
cin>>a>>b;
while(cin>>sa[n]>>sb[n]) //因为不知道会输入几个字符串,需要用while输入
n++;
q.push(a);
nq.push();
bfs();
}
洛谷 P1032 子串变换的更多相关文章
- 洛谷 P1032 字符变换
洛谷 P1032 字符变换 题目描述 已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A 中的子串 A1 ...
- 【题解】洛谷P1032 [NOIP2002TG]字串变换(BFS+字符串)
洛谷P1032:https://www.luogu.org/problemnew/show/P1032 思路 初看题目觉得挺简单的一道题 但是仔细想了一下发现实现代码挺麻烦的 而且2002年的毒瘤输入 ...
- [洛谷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 字串变换【bfs】
题目链接:https://www.luogu.org/problemnew/show/P1032 题意: 给定一个原字符串和目标字符串,以及几个字符串变换的规则. 问能否根据这几个规则在十步之内把原字 ...
- 洛谷 P1032 字串变换 (BFS)
题目传送门 我即使是死了,钉在棺材里了,也要在墓里,用这腐朽的声带喊出 STL大法好 这题最麻烦的其实是处理字符串,真正的搜索部分我个人认为也就只有橙题或黄题的难度.而处理字符串,正如前面所说,STL ...
- 洛谷 P1032 [ NOIP 2002 ] 字串变换 —— 字符串+bfs
题目:https://www.luogu.org/problemnew/show/P1032 字符串好复杂...先写了个 dfs ,RE一个点TLE一个点,不知该怎么改了... #include< ...
- 洛谷 P1032 字串变换(map)
题目传送门 解题思路: 搜索题,因为要求最少次数,用bfs. AC代码: #include<cstdio> #include<iostream> #include<cst ...
随机推荐
- # 20175329 2018-2019-2 《Java程序设计》第一周学习总结
教材学习内容总结 ·通过教材学习了如何安装JAVA ·在安装JAVA后对其环境变量的设置 ·第一次接触并手打出JAVA语言## 教材学习中的问题和解决过程- 问题1:在环境变量设置中不懂path cl ...
- CF741 D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
题目意思很清楚了吧,那么我们从重排回文串的性质入手. 很容易得出,只要所有字符出现的次数都为偶数,或者有且只有一个字符出现为奇数就满足要求了. 然后想到什么,Hash?大可不必,可以发现字符\(\in ...
- SpringBoot整合Mybatis使用注解或XML的方式开发
2018-6-4 补充mybatis-spring-boot注解的使用 1.导包 只需要再导入mysql+mybatis两个包 <dependency> <groupId>or ...
- 【重磅】Spring Boot 2.1.0 权威发布
如果这两天登录 https://start.spring.io/ 就会发现,Spring Boot 默认版本已经升到了 2.1.0.这是因为 Spring Boot 刚刚发布了 2.1.0 版本,我们 ...
- shell 读取配置文件的方法
原文地址:http://bbs.chinaunix.net/thread-3628456-1-1.html 总结地址:https://www.cnblogs.com/binbinjx/p/568021 ...
- 广播频道-BroadcastChannel
BroadcastChannel,就字面意思来言,叫做“广播频道”,官方文档说,该API是用于同源不同页面之间完成通信的功能. 1. 概况 它与window.postMessage的区别就是,Broa ...
- POJ - 3264 线段树模板题 询问区间最大最小值
这是线段树的一个模板题,给出一串数字,然后询问区间的最大最小值. 这个其实很好办,只需把线段树的节点给出两个权值,一个是区间的最小值,一个是区间的最大值,初始化为负无穷和正无穷,然后通过不断地输入节点 ...
- Python Revisited Day 02 (数据类型)
目录 Python 关键字 整数 整数转换函数 整数位逻辑操作符 浮点类型 math模块函数与常量 复数 精确的十进制数字 decimal 字符串 str.format() 格式规约 Python 关 ...
- UnderWater+SDN论文之二
---- Software-defined underwater acoustic networking platform and its applications source: Ad Hoc Ne ...
- session与cookie的区别以及HTML5中WebStorage理解
一.session与cookie的区别 二.HTML5中WebStorage理解 WebStorage的目的是克服由cookie所带来的一些限制,当数据需要被严格控制在客户端时,不需要持续的将数据发回 ...