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

string判重+删除

map记录步数,,

但是不知道为啥最后一个点过不了?

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<cstring>
 5 #include<cstdlib>
 6 #include<map>
 7 using namespace std;
 8 string a,b;
 9 struct node
10 {
11     string x;
12     string y;
13 }bc[9];
14 int num=1;
15 int step=0;
16 map<string,int>bushu;
17 string pc;//
18 int vis[101];
19 void bfs()
20 {
21     queue<string>q;
22     q.push(a);
23     bushu[q.front()]=0;
24
25     while(q.size()!=0)
26     {
27         int numm=q.size();
28         string p=q.front();
29         if(p==b)
30                 {
31                 printf("%d",bushu[p]);
32                 exit(0);
33                 }
34         pc=pc+" "+p+" ";
35         q.pop();
36         for(int i=1;i<=num;i++)
37         {
38             string dd=p;
39             string change=p;
40             while(1)
41             {
42                 int where=change.find(bc[i].x);
43                 if(where!=-1&&vis[where]==0)
44                 {
45                     vis[where]=1;
46                     change[where]='*';
47
48                     int l=bc[i].x.length();
49                     p.replace(where,l,bc[i].y);
50
51                     if(p==b)
52                     {
53                     printf("%d",bushu[dd]+1);
54                     exit(0);
55                     }
56
57                     if(pc.find(p)!=-1)continue;// 判重
58                     pc=pc+" "+p+" ";
59
60                     bushu[p]=bushu[dd]+1;
61
62                     cout<<step<<" "<<bushu[p]<<" "<<p<<endl;
63
64                     if(p==b)
65                     {
66                     printf("%d",bushu[p]);
67                     exit(0);
68                     }
69                     else
70                     {step++;q.push(p);}
71                     if(bushu[p]>10)
72                     {printf("NO ANSWER!");exit(0);}
73                     p=dd;
74                 }
75                 else break;
76             }
77
78         }
79     }
80 }
81 int main()
82 {
83     cin>>a>>b;
84     while(cin>>bc[num].x>>bc[num].y){num++;}
85     bfs();
86     printf("NO ANSWER!");
87     return 0;
88 }

转载于:https://www.cnblogs.com/zwfymqz/p/6764774.html

1099 字串变换 2002年NOIP全国联赛提高组相关推荐

  1. CODE[VS] 1098 均分纸牌 ( 2002年NOIP全国联赛提高组)

    arr[i] :表示每个牌堆的纸牌的数目 平均值 :当纸牌数都一样多时,纸牌的数目从左向右考虑,每堆纸牌有三种状态: 1) arr[i] == 平均值,考虑arr[i+1] 2) arr[i] < ...

  2. 1009 产生数 2002年NOIP全国联赛普及组

    009 产生数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个整数 n(n<10^ ...

  3. Codevs 1010 过河卒 2002年NOIP全国联赛普及组

    1010 过河卒 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 如图,A 点有一个过河卒 ...

  4. 过河 2005年NOIP全国联赛提高组(离散化+dp)

    1105 过河 2005年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description 在河上有一 ...

  5. 聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)

    聪明的质监员 2011年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 小 T 是一名质量监督员, ...

  6. Codevs 1066 引水入城 2010年NOIP全国联赛提高组

    1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 在一个遥远的国度 ...

  7. 选数 2002年NOIP全国联赛普及组

    题目描述 Description 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整 ...

  8. 【2002年NOIP全国联赛普及组】过河卒

    描述 棋盘上 A 点有一个过河卒,需要走到目标 B 点.卒行走的规则:可以向下.或者向右.同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为" ...

  9. 棋盘型动态规划 之 CODE[VS] 1169 传纸条 2008年NOIP全国联赛提高组

    /* 这道题要解决两个问题1)状态和状态方程2)怎么保证每走一步,所形成的路径不相交,以保证最后生成的完整路径不相交.(1)状态: dp[i][j][k][l] = 小渊传递的纸条到[i][j]的位置 ...

最新文章

  1. react 嵌套渲染_React 中嵌套数组数据如何渲染到前端页面
  2. LA3902 Network (树上dfs)
  3. 【Python刷题】_4
  4. OpenCV-Python教程(6)(7)(8): Sobel算子 Laplacian算子 Canny边缘检测
  5. [转载]大型网站架构演变和知识体系
  6. 详解Python科学计算扩展库numpy中的矩阵运算(1)
  7. GitHub - ErnestChen1/SmartSpeaker: 一个基于云端语音识别的智能控制设备,类似于天猫精灵,小爱同学。采用的芯片为stm32f407,wm8978,esp8266。...
  8. 核PCA与PCA的精髓和核函数的映射实质
  9. 阿里云祝顺民:云网络的十年“修路”历程
  10. 睡眠 应该用 a加权 c加权_?焦虑自测 ,看看你的焦虑程度到底有多深?是否影响睡眠?...
  11. 3.Java垃圾回收机制面试题
  12. python blp模型 估计_简述BLP模型
  13. 焊接技巧 -- 拖焊
  14. android 5.0 wifi移植,android  wifi移植
  15. SpringCloud学习(十八):Config分布式配置中心的介绍与搭建
  16. 可口可乐和百事可乐查出杀虫剂成分!
  17. 海关跨境电商进口统一版信息化系统平台数据实时获取接口(试行) java版
  18. oracle里的tns是什么意思
  19. Android Studio Chipmunk Patch 2(android-studio-2021.2.1.16)下载地址
  20. 微信小程序面试题(个人学习)

热门文章

  1. springBoot后台发送内容至邮箱
  2. 检测到磁盘可能为uefi引导_Win10创意者无法更新提示“磁盘布局不受uefi固件支持”怎么办?...
  3. python 修饰器_python中用修饰器进行异常日志记录
  4. 大一计算机理论考试知识点,计算机一级考试理论知识点整理.doc
  5. spring cloud整合Ribbon
  6. linux u盘新建文件夹加密,linux磁盘的加密保护以及u盘加密的方法。
  7. postgres 显示变量_sql - 如何在PostgreSQL查询中声明变量
  8. 后勤管理系统_教育信息化2.0,2019年校园智慧后勤管理系统五大品牌
  9. python自动生成分析报告_利用PYTHON全自动生成分析报告
  10. aop区别 decorator_Decorator或Proxy模式;AOP拦截器