啊本来以为2002的题应该会比较友善于是很naive地像模拟一样用着stl乱玩结果死也过不了最后一个点qaq

心情很悲痛于是为了解放自我

 #include<iostream>
 #include<cstdio>
 #include<cstdlib>
 #include<cstring>
 #include<algorithm>
 #include<string>
 #include<map>
 using namespace std;
 ],bb[];
 ];
 ];
 map <string,bool> k;
 int main(){
 //    freopen ("string.in","r",stdin);
 //    freopen ("string.out","w",stdout);
     cin>>a>>b;
     ;
     while (cin>>aa[j]>>bb[j]) j++;
     j--;
     ,t=;
     q[]=a;
     k[a]=;
     ;
     while (h<t){
         string u=q[++h];
         string l;
         int d=tt[h];
         if (u==b) {fl=tt[h];break;}
         ) {fl=;break;}
         ;
         ;i<=j;++i){
             int sr=aa[i].length();
             );
             ) continue;
             ;++o){
                 if (u.substr(o,sr)!=aa[i]) continue;
                 l=u;
                 l.replace(o,sr,bb[i]);
                 ;;}
                 ,k[l]=;
                 ) {cout<<;}//先让我强行卡过最后一个点爽一下
             }
          }
      }
     ) cout<<"NO ANSWER!";
     else cout<<fl;
     ;
   }

后来想了一下这样还是不太好

去网上看了一下双向广搜 大概就是一种在知道初始并且也知道目标状态的情况下的优化型搜索

一般有两种方法 一种是直接交替着搜 但是这种似乎有点问题 好像是说如果要交替应该是一层一层地交替

另外一种是相对而言更优秀一点的 就是每次选两边中状态更少的那一队进行扩展 这样能使扩展的节点更少一点吧

具体实现大概就是把原来的bfs分为两端 然后好像还可以用^操作

我实在是太懒了所以没怎么想好好打就把上面那个乱玩的随便复制了一遍 勉勉强强最后一点还是拖过了(本来就只想着要过最后一个点23333

一定是stl太慢了才不是我垃圾呢哼(睁眼说瞎话

 #include<iostream>
 #include<cstdio>
 #include<cstdlib>
 #include<cstring>
 #include<algorithm>
 #include<string>
 #include<map>
 using namespace std;
 ],bb[];
 ],p[];
 ][];
 map <];
 map <string,int> kk;
 int main(){
     freopen ("string.in","r",stdin);
     freopen ("string.out","w",stdout);
     cin>>a>>b;
     ;
     while (cin>>aa[j]>>bb[j]) j++;
     j--;
     ,t=,hh=,ttt=;
     q[]=a;
     p[]=b;
     k[][a]=;
     k[][b]=;
     ;
     while (h<t&&hh<ttt){
         if (t<=ttt){
             string u=q[++h];
             string l;
             ][h];
             ) {fl=;break;}
             ;
             ;i<=j;++i){
                 int sr=aa[i].length();
                 );
                 ) continue;
                 ;++o){
                     if (u.substr(o,sr)!=aa[i]) continue;
                     l=u;
                     l.replace(o,sr,bb[i]);
                     ][l]) {cout<<d++tt[][kk[l]];;
                     }
                     ][l]) q[++t]=l,tt[][t]=d+,k[][l]=,kk[l]=t;
             }
          }
         }
         else{
             string u=p[++hh];
             string l;
             ][hh];
             ) {fl=;break;}
             ;
             ;i<=j;++i){
                 int sr=bb[i].length();
                 );
                 ) continue;
                 ;++o){
                     if (u.substr(o,sr)!=bb[i]) continue;
                     l=u;
                     l.replace(o,sr,aa[i]);
                     ][l]) {cout<<d++tt[][kk[l]];;}
                     ][l]) p[++ttt]=l,tt[][ttt]=d+,k[][l]=,kk[l]=ttt;
                 }
             }
         }
     }
     ) cout<<"NO ANSWER!";
     else cout<<fl;
     ;
   }

NOIP2002 字符变换的更多相关文章

  1. 洛谷 P1032 字符变换

    洛谷 P1032 字符变换 题目描述 已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则): A1​ -> B1​ A2​ -> B2​ 规则的含义为:在 A 中的子串 A1​ ...

  2. LuoguP1032 字符变换(BFS)

    题目链接为:https://www.luogu.org/problemnew/show/P1032 思路:看到数据比较小,而且最多有6个规则,就可以用搜索去做了,我用的BFS,大体思路如下: 定义结构 ...

  3. python中实现打印特定字符变换

    首先需要将 lib文件 放在该文件同一目录 使用的时候,先导入 from lib.common import print_msg ,然后调用里面的 print_msg() 方法即可! lib文件地址: ...

  4. $NOIp$提高组历年题目复习

    写在前面 一个简略的\(NOIp\)题高组历年题目复习记录.大部分都有单独写题解,但懒得放\(link\)了\(QwQ\).对于想的时候兜了圈子的题打上\(*\). \(NOIp2018\ [4/6] ...

  5. $NOIp$提高组做题记录

    对了我在这里必须讲一个非常重要的事情,就是前天也就是$2019.8.21$的傍晚,我决定重新做人了$!!$ 其实之前没怎么做$Noip$题,那就从现在开始叭

  6. hdu----(4545)魔法串(LCS)

    魔法串 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submiss ...

  7. fw:sed的高级用法

    转的,找不到原创了.... sed高级用法 <收藏> 首先,应该明白模式空间的定义.模式空间就是读入行所在的缓存,sed对文本行进行的处理都是在这个缓存中进行的.这对接下来 的学习是有帮助 ...

  8. Toad

    1. Toad 规矩: toad 不会违反, 限制, 扩大 你当前用户的权限, toad 不会影响你定义的关于instance的内容. 2. toad 可以执行大部分在 sql*plus 中执行的命令 ...

  9. 进程间通信之popen和pclose函数

    常见的操作是创建一个管道连接到另一个进程,然后读其输出或向其输入端发送数据,为此,标准I/O库提供了两个函数popen和pclose.这两个函数实现的操作是:创建一个管道,调用fork产生一个子进程, ...

随机推荐

  1. 《java.util.concurrent 包源码阅读》23 Fork/Join框架之Fork的冰山一角

    上篇文章一直追踪到了ForkJoinWorkerThread的pushTask方法,仍然没有办法解释Fork的原理,那么不妨来看看ForkJoinWorkerThread的run方法: public ...

  2. 安卓自定义控件(一)Canvas、Paint、Shader、Xfermode

    关于自定义控件,之前就写过一篇自定义控件,上图下字的Button,图片任意指定大小,但是使用效果还是让人感觉不幸福,这次索性彻彻底底地对自定义控件做一次彻彻底底的总结. 我会花4篇博客来介绍自定义控件 ...

  3. Jenkins与网站代码上线解决方案

    1.1 前言 Jenkins是一个用Java编写的开源的持续集成工具.在与Oracle发生争执后,项目从Hudson项目独立. Jenkins提供了软件开发的持续集成服务.它运行在Servlet容器中 ...

  4. 初学时遇到的小问题Your content must have a ListView whose id attribute is 'android.R.id.list'

    问题提出 错误提示:Your content must have a ListView whose id attribute is 'android.R.id.list' 关于解决Your conte ...

  5. Server SQL2008对文件的基础操作(1)

    1.一个文件的基本框架为:文件名.文件地址.文件大小.文件最大的大小.文件的增量(Filegrowth). 2.文件有mdf.ndf.ldf 三种文件的区别. 3.文件组可以进行文件的管理 FileG ...

  6. 【转】Nginx反向代理和负载均衡

    原文链接:http://www.cnblogs.com/shuoer/p/7820899.html Nginx反向代理和负载均衡 环境说明 由于我使用的是windows系统,所以我用虚拟机虚拟出来了3 ...

  7. Ubuntu 17.04 安装

    不忘初心,方得始终. 今天听别人说17.04发布了,我是开心的不得了,赶紧下载了一个,准备安装在自己的本子上.这段时间已经花费了更多的时间在docker和OpenStack上面,没时间看新闻了,因此今 ...

  8. 数据库索引------Hash索引的使用限制

    1.hash索引必须进行二次查找. 2.hash索引无法进行排序. 3.hash索引不支持部分索引查找也不支持范围查找. 4.hash索引中hash码的计算可能存在hash冲突.

  9. LNMP1.3 一键配置环境,简单方便

    系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要3GB以上硬盘剩余空间 需要128MB以上内存(如果为128MB的小内存VPS,Xe ...

  10. 分布式系统中的必备良药 —— RPC

    阅读目录 前言 成熟的解决方案 剖析 性能测试 结语 一.前言 在上一篇分布式系统系列中<分布式系统中的必备良药 —— 服务治理>中阐述了服务治理的一些概念,那么与服务治理配套的必然会涉及 ...