luogu题解P1032字串变换--BFS+STL:string骚操作
题目链接
https://www.luogu.org/problemnew/show/P1032
分析
这题本来很裸的一个BFS,发现其中的字符串操作好烦啊。然后就翻大佬题解发现用STL中的string居然变得这么简洁!!!
各种string操作请看另一位大佬博客,写得很全啊:
https://www.cnblogs.com/rvalue/p/7327293.html#commentform
其实我们这题只用到两个相关函数:\(S.find(string,pos)\)和\(S.substr()\)
前一个是朴素查找,后一个是子串替换,用法都在那个大佬博客中有
代码
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <string>
#include <queue>
#include <iostream>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/hash_policy.hpp>
#define ll long long
#define ri register int
#define mkp make_pair
using namespace std;
using namespace __gnu_pbds;
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;return ;
}
const int maxn=25;
const int inf=0x7fffffff;
pair<string,string> pi[maxn],TMP;
int ans=0,cnt=0;
gp_hash_table <string,bool> g;
string A,B;
struct Dat{
string p;
int step;
Dat(){;}
Dat(string _p,int _s){p=_p;step=_s;}
}Tmp;
queue< Dat > q;
int main(){
string a,b;
int t,pos;
std::ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>A>>B;
while(cin>>a>>b){
pi[++cnt]=mkp(a,b);
}
q.push(Dat(A,0));
g[A]=1;
while(q.size()){
Tmp=q.front();
A=Tmp.p,t=Tmp.step;q.pop();
if(A==B){
ans=t;
if(t<10){printf("%d\n",t);}
else puts("NO ANSWER");
return 0;//break;
}
for(ri i=1;i<=cnt;i++){
a=pi[i].first;
pos=A.find(a);//返回查找串开头位置
while(pos!=A.npos){
b=A.substr(0,pos);//将前部分串复制下来
b+=pi[i].second;//拼接串
b+=A.substr(pos+a.size());//将后面的串接上去
if(!g[b]){
q.push(Dat(b,t+1));
g[b]=1;
}
pos=A.find(a,pos+1);
}
}
}
puts("NO ANSWER");
return 0;
}
luogu题解P1032字串变换--BFS+STL:string骚操作的更多相关文章
- [luogu普及] ---P1032 字串变换
目的 刷完100AC (最近很不舒服,写博客耗时啊 记录第一个字符串的题目 参考 https://www.luogu.org/blog/user20197/solution-p1032 代码 #inc ...
- 洛谷 P1032 字串变换题解
题目链接:https://www.luogu.org/problem/P1032 题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A_1A1 ->B_1B1 A ...
- luogu P1032 字串变换
题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...
- P1032 字串变换 字符串BFS
题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A_1A1 ->B_1B1 A_2A2 -> B_2B2 规则的含义为:在 AA中的子串 A_1A1 ...
- [洛谷P1032] 字串变换
洛谷题目链接:字串变换 题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B ...
- [NOIP2002] 提高组P1032 字串变换
题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...
- NOIP2002字串变换[BFS]
题目描述 已知有两个字串 A$, B$ 及一组字串变换的规则(至多6个规则): A1$ -> B1$ A2$ -> B2$ 规则的含义为:在 A$中的子串 A1$ 可以变换为 B1$.A2 ...
- 洛谷 P1032 字串变换
题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...
- 字串变换 bfs + 字符串
题目描述 已知有两个字串A,BA,BA,B及一组字串变换的规则(至多666个规则): A1A_1A1 ->B1 B_1B1 A2A_2A2 -> B2B_2B2 规则的含义为:在 ...
随机推荐
- Flutter打开第三方应用
在flutter中打开第三方应用可以使用url_launcher插件 打开https://pub.dartlang.org/,然后搜索url_launcher,然后点击进入该插件界面 大家在insta ...
- 在windows系统搭建Flutter开发环境
开发环境搭建(Windows) 系统要求 设置FLutter镜像(非必须) 获取Flutter SDK Android开发环境设置 安装Flutter插件 系统要求 在Windows上要安装并运行Fl ...
- Qt高级——QTestLib单元测试框架
一.QTestLib简介 1.QTestLib简介 QTestLib是Qt提供的一种针对基于Qt编写的程序或库的单元测试框架.QTestLib提供了单元测试框架的基本功能,并提供了针对GUI测试的扩展 ...
- ArcGIS Python 保存lyr
import arcpy ##################my = arcpy.GetParameterAsText(0)mylyrfile = arcpy.GetParameterAsText( ...
- android studio最新版的安装和配置(3.1.2)
android studio最新版的安装和配置(3.1.2) 下载地址: android studio:http://www.android-studio.org/ JDK:http://www.or ...
- LC 980. Unique Paths III
On a 2-dimensional grid, there are 4 types of squares: 1 represents the starting square. There is e ...
- Android下文件访问的权限
* 默认情况下,Android中,应用程序的文件时私有的,其他应用程序不可以读取私有的文件 * 底层用的时Linux文件的权限 - rw- rw- --- - :文件 ...
- R语言与概率统计(三) 多元统计分析(中)
模型修正 #但是,回归分析通常很难一步到位,需要不断修正模型 ###############################6.9通过牙膏销量模型学习模型修正 toothpaste<-data. ...
- memcached-slab内存管理
一.Memcache内存分配机制 关于这个机制网上有很多解释的,我个人的总结如下. Page为内存分配的最小单位. Memcached 的内存分配以page为单位,默认情况下一个page是1M,可以通 ...
- 一起学习linux环境的git
第一节 GIT最初是由Linus Benedict Torvalds为了更有效地管理Linux内核开发而创立的分布式版本控制软件,与常用的版本控制工具如CVS.Subversion不同,它不必服务器端 ...