洛谷 P1032 字串变换
来源:互联网 发布:网络搜索引擎6个字母 编辑:程序博客网 时间:2024/06/05 18:34
题目描述
已知有两个字串 A, B 及一组字串变换的规则(至多6个规则):
A1 -> B1
A2 -> B2
规则的含义为:在 A$中的子串 A1 可以变换为 B1、A2 可以变换为 B2 …。
例如:A='abcd'B='xyz'
变换规则为:
‘abc’->‘xu’‘ud’->‘y’‘y’->‘yz’
则此时,A 可以经过一系列的变换变为 B,其变换的过程为:
‘abcd’->‘xud’->‘xy’->‘xyz’
共进行了三次变换,使得 A 变换为B。
输入输出格式
输入格式:
键盘输人文件名。文件格式如下:
A B A1 B1 \
A2 B2 |-> 变换规则
... ... /
所有字符串长度的上限为 20。
输出格式:
输出至屏幕。格式如下:
若在 10 步(包含 10步)以内能将 A 变换为 B ,则输出最少的变换步数;否则输出"NO ANSWER!"
输入输出样例
输入样例#1:
abcd xyzabc xuud yy yz
输出样例#1:
3
1 /* 2 双向bfs 3 同时搜索 不需要剪枝 4 巧妙利用string函数 5 */ 6 #include<map> 7 #include<queue> 8 #include<string> 9 #include<cstdio>10 #include<iostream>11 #define MAXN 1012 13 using namespace std;14 15 string str[MAXN],str2[MAXN];16 17 string pre,last;18 19 int n=1;20 21 bool f[MAXN];22 23 queue<string> head,tail;24 25 map<string,int> visa,visb;26 27 inline void bfs() {28 visa[pre]=1;visb[last]=1;29 head.push(pre);30 tail.push(last);31 while(1) {32 if(head.empty()||tail.empty()) {cout<<"NO ANSWER!"<<endl;return;}33 string ta,tb;34 ta=head.front();35 tb=tail.front();36 for(int i=1;i<=n;i++) {37 int k=0;38 while(ta.find(str[i],k)!=-1) {//以下函数不懂得可以自己百度 39 k=ta.find(str[i],k);40 int len=str[i].size();41 ta.replace(k,len,str2[i]);42 if(visa[ta]==0) {43 visa[ta]=visa[head.front()]+1;44 head.push(ta);45 }46 if(visb[ta]!=0) {47 printf("%d\n",visa[ta]+visb[ta]-2);48 return;49 }50 k++;51 ta=head.front();52 }53 k=0;54 while(tb.find(str2[i],k)!=-1) {55 k=tb.find(str2[i],k);56 int len=str2[i].size();57 tb.replace(k,len,str[i]);58 if(visb[tb]==0) {59 visb[tb]=visb[tail.front()]+1;60 tail.push(tb);61 }62 if(visa[tb]!=0) {63 printf("%d\n",visa[tb]+visb[tb]-2);64 return;65 }66 k++;67 tb=tail.front();68 }69 }70 head.pop();71 tail.pop();72 }73 return;74 }75 76 int main() {77 cin>>pre>>last;78 while(cin>>str[n]>>str2[n]){n++;}79 n--;80 bfs();81 return 0;82 }
阅读全文
0 0
- 洛谷 P1032 字串变换
- 洛谷 P1032 字串变换
- 洛谷 P1032 字串变换
- 洛谷 P1032 字串变换
- 洛谷 P1032 字串变换
- [抄]洛谷 P1032 字串变换
- 洛谷P1032&NOIP2002 字串变换
- 洛谷p1032字串变换c++
- 洛谷 P1032 [NOIP2002 T2] 字串变换
- P1032 字串变换
- BFS之P1032 字串变换
- 双向bfs——洛谷P1032 字串变换
- 洛谷1032 字串变换
- 【洛谷 1032】 字串变换
- 洛谷1032 字串变换
- 洛谷 1032 字串变换
- 【p1032-子串变换】解题记录
- 字串变换
- NOIP2004提高组T2 合并果子
- P2048 洛谷 统计和
- NOI-CCF 1123. A-B (Standard IO)
- NOIP 普及组 传球游戏
- 洛谷 P1019 单词接龙
- 洛谷 P1032 字串变换
- 【Linux学习】之 用户管理
- Vijos 桐桐的糖果计划 (tarjan求桥+双连通分量)
- Vijos Victoria的舞会3
- USACO Network of Schools(学校网络) ---强连通分量
- Vijos 捕风捉影
- Vijos 小白逛公园 线段树加DP
- Vijos CoVH之柯南开锁 (二分图)
- Vijos 字符串还原(大大大暴力)