洛谷P1032字串变换题解--zhengjun
题目描述
已知有两个字串A,BA,BA,B及一组字串变换的规则(至多666个规则):
A1A_1A1 −-−> B1B_1B1
A2A_2A2 −-−> B2B_2B2
规则的含义为:在 AAA中的子串 A1A_1A1 可以变换为 B1B_1B1,A2A_2A2 可以变换为 B2B_2B2 ⋅⋅⋅···⋅⋅⋅。
例如:A=abcd
,B=xyz
,
变换规则为:
abc
→xu
,ud
→y
,y
→yz
则此时,AAA可以经过一系列的变换变为BBB,其变换的过程为:
abcd
→xud
→xy
→xyz
。
共进行了333次变换,使得AAA变换为BBB。
输入格式
输入格式如下:
AAA BBB
A1A_1A1 B1B_1B1
A2A_2A2 B2B_2B2 |-> 变换规则
⋅⋅⋅···⋅⋅⋅ ⋅⋅⋅···⋅⋅⋅ /
所有字符串长度的上限为202020。
输出格式
输出至屏幕。格式如下:
若在101010步(包含101010步)以内能将AAA变换为BBB,则输出最少的变换步数;否则输出NO ANSWER!
输入输出样例
输入 #1 复制
abcd xyz
abc xu
ud y
y yz
输出 #1 复制
3
思路
首先,既然告诉了我们数据这么小,那么一定就是一个搜索,那么,是 dfsdfsdfs 好还是 bfsbfsbfs 好呢,因为我们要求的是最小的变换次数,所以 dfsdfsdfs 要把整张图搜完了才能得到最终答案,而 bfsbfsbfs 就只要第一次搜到就是最小变换次数了,所以,当然要用 bfsbfsbfs
代码
#include<bits/stdc++.h>
using namespace std;
string a[7],b[7];
int n;
map<string,int> f;//剪枝,如果这个字符串已经搜过了,就不用再搜了
struct zj{string s;//当前的字符串int k;//所用步数
};
int bfs(){queue<zj> q;q.push(zj{a[0],0});while(!q.empty()){zj x=q.front();q.pop();if(x.k==10)//没必要再搜了continue;for(int i=1;i<=n;i++){for(int pos=x.s.find(a[i],0);pos!=-1;pos=x.s.find(a[i],pos+1)){//a.find(b,x)表示在a这个字符串中从第x个字符寻找b这个字符串,如果没找到,返回-1string t=x.s;t.replace(pos,a[i].length(),b[i]);//这个a.replace(x,len,b)表示在字符串a的第x个字符后的len个字符(包括第x个字符)替换成b这个字符串if(!f[t]){//前面的剪枝if(t==b[0])//找到了解return x.k+1;f[t]=1;//标记q.push(zj{t,x.k+1});}}}}return -1;//找不到
}
int main(){while(cin>>a[n]>>b[n])n++;n--;//最后n比原来的n大1int ans=bfs();if(ans!=-1)printf("%d",ans);else printf("NO ANSWER!");return 0;
}
谢谢–zhengjun
洛谷P1032字串变换题解--zhengjun相关推荐
- 洛谷P1032 字串变换
字符串的题目一般都很恶心,特别是当你妄图只用原生c语言的char去做的时候. string类虽然方便,但是相较于char慢很多.可是慢所带来的好处就是可以方便的完成很多操作.例如用string去实现这 ...
- P1032 字串变换(bfs)
https://www.luogu.org/problemnew/show/P1032 题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A 1-> B 1 A 2 ...
- 【题解】luogu p1032 字串变换
总结: 1.bfs的模板没有掌握好 2.string s 的时候可以用s[m]=x 将s字符串中的m位置的字符改变成x字符 一道简单的bfs #include<bits/stdc++.h> ...
- 洛谷1279 字串距离
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为"abcbcd",则字符串"abcb□cd"," ...
- P1032 字串变换
题面:https://www.luogu.org/problem/P1032 本题中需熟练掌握string类型的库函数: string a,b; a.find(b,pos)为 从pos开始找b第一次出 ...
- 洛谷P1279 字串距离 (动态规划)
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为"abcbcd",则字符串"abcb□cd"," ...
- 广度优先搜索——字串变换(洛谷 P1032)
题目选自洛谷P1032 题意已经把做法写得特别露骨了...最小步数,最多6个变换规则....广搜自不必说,不仅可以寻找解而且还能判断步数(根据广搜首解最优的性质可以得到). 用queue来进行广搜,需 ...
- 字串变换(洛谷-P1032)
题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...
- P1032 [NOIP2002 提高组] 字串变换
展开 题目背景 本题疑似错题,不保证存在靠谱的多项式复杂度的做法.测试数据非常的水,各种做法都可以通过,不代表算法正确.因此本题题目和数据仅供参考. 题目描述 已知有两个字串 A,BA,B 及一组字串 ...
最新文章
- “这辈子不可能打工男子”出狱了,引发热议!
- linux部署项目文档,Linux系统部署项目
- 限制IP 访问 Oracle 的方法
- 我为什么重新开始学习数学?
- 奇虎360:说爱你不容易的“母婴平台”故事
- SpringBoot集成JPA根据实体类自动生成表
- java可视化界面视频_java中的可视化界面
- Scrum 项目4.0--软件工程
- Microsoft Graph Toolkit 初探
- [PALAPALA] 无题 - 外来的和尚会念经
- mybatis typehandler
- opencv模糊图像变清晰_opencv-python 4.2图像模糊
- 深耕一个行业有缺点?
- SpringBoot_MD5加密工具类
- coldfusion_ColdFusion MX 7功能之旅
- java制作手机投射电脑_将Android手机投影到Win10计算机的最简单教程
- 100种鞋子的画法,如何画鞋子
- 【转载】:Autolisp:利用AuoCAD之Lisp编程案例之智能加工齿轮的演示程序-----一个处女座程序猿
- 通过百度地图实现定位并获取本地当日天气信息
- 【uni-app】H5的返回拦截经验分享
热门文章
- 换ip地址除开虚拟服务器,GoDaddy虚拟主机更换IP地址和更换主域名绑定的方法
- OSChina 周三乱弹 ——大变魔术啦,汪星人秒变熊孩子
- 运维小知识之CDN内容分发网络原理解析
- 1116: [POI2008]CLO
- 19.3 C++STL标准模板库大局观-容器的说明和简单应用例续
- 简单漏洞:CVE-2022-0543 Redis Lua 沙盒绕过
- 入门渗透:telnet远程登入——Meow
- android 回编译失败,Androidkiller 回编译失败
- 如何删除Chrome地址栏记录?
- php 根据银行卡号获取所属银行