1099 字串变换

2002年NOIP全国联赛提高组

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述 Description

已知有两个字串 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$。

输入描述 Input Description

输入格式如下:

   A$ B$
   A1$ B1$ \
   A2$ B2$  |-> 变换规则
   ... ... / 
  所有字符串长度的上限为 20。

输出描述 Output Description

若在 10 步(包含 10步)以内能将 A$ 变换为 B$ ,则输出最少的变换步数;否则输出"NO ANSWER!"

样例输入 Sample Input

abcd xyz
abc xu
ud y
y yz

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

hehe

/*
宽搜,将每个规则都用一用就好了
字符串方面的函数不会用不大好办
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
map<string,bool>m;
string d[],e,a[],b[];
int tim[];
int main(){
int h=,t=;
cin>>d[]>>e;
tim[]=;
int n=;
while(cin>>a[n]>>b[n])n++;//变换规则
while(tim[h]<&&tim[h]!=){//到状态h需要的步数
for(int i=;i<n;i++){//尝试每一种规则
int pos=d[h].find(a[i]);//找到可替换的字符串在字符串中的位置
while(pos!=d[h].npos){//npos表示不存在,也就是只要存在可替换的字符串,就去替换它
d[t]=d[h];
d[t].replace(pos,a[i].size(),b[i]);
tim[t]=tim[h]+;
if(d[t]==e){cout<<tim[h]<<endl;return ;}
if(m.find(d[t])==m.end())m[d[t++]]=true;
pos=d[h].find(a[i],pos+);
}
}
h++;
}
cout<<"NO ANSWER!"<<endl;
return ;
}

最新文章

  1. TCP/IP 和 Socket 的关系
  2. 1007. Maximum Subsequence Sum (25)
  3. IOS 7 Study - Manipulating a Navigation Controller’s Array of View
  4. u-boot移植为tiny6410步骤
  5. 无法捕获的异常:MissingMethodException
  6. MD5和SHA512Managed ——哈希算法
  7. JS表格排序
  8. C#利用 HttpWebRequest 类发送post请求,出现“套接字(协议/网络地址/端口)只允许使用一次”问题
  9. WinForm DotNetBar 动态添加DataGridView
  10. hdu2795(线段树)
  11. hadoop datanode 启动出错
  12. Mockito-简单使用使用
  13. JS实现数组去重(重复的元素只保留一个)
  14. nodejs使用log4js记录日志
  15. 【linux】环境变量
  16. 解决pycharm安装包过程出现的问题:module &#39;pip&#39; has no attribute &#39;main&#39;
  17. Spring Security构建Rest服务-1203-Spring Security OAuth开发APP认证框架之短信验证码登录
  18. 国内maven仓库地址资源汇总
  19. ECMAScript5之Object学习笔记(一)
  20. C语言实现---学生成绩管理系统

热门文章

  1. iOS8需要兼容的内容
  2. EasyDarwin开源流媒体服务器gettimeofday性能优化(3000万/秒次优化至8000万次/秒)
  3. mybatis学习总结(三)——增删查改
  4. 7-5 打印选课学生名单(25 point(s)) 【排序】
  5. Ubuntu 14.04 下 android studio 安装 和 配置【转】
  6. Chrome 插件 Vimium——让你脱离鼠标
  7. Js中获取显示器、浏览器以及窗口等的宽度与高度的方法
  8. PL/SQL DEVELOPER执行计划的查看
  9. codeforces 466C. Number of Ways 解题报告
  10. win10环境变量path误删(windows找不到文件‘%windir%\systempropertiesadvanced.exe’)的解决办法