设为首页 加入收藏

TOP

通过变换A B得出xzy 的字符串
2013-04-10 11:39:02 来源: 作者: 【 】 浏览:204
Tags:通过 变换 得出 xzy  字符串

  描述:题意很简单,不过要是想要通过看题明白确实挺麻烦的,就是给你一个开始字符串w和最终字符串z,字符串中只有a与b,如果遇到a就替换成第一个字符串,遇到b就替换成第二个字符串,问这样的替换方式能否构成一个形如 xzy 的字符串(x,y,可为空);

  #include <iostream>

  #include <cstdio>

  #include <cstring>

  #include <map>

  #include <string>

  using namespace std;

  #define MAX 130000

  map<string,int> hash;

  string a,b,w,z,s[MAX];

  int flag,rear=1,front=0;

  void judge(string &p)

  {

  for(int i=0; i<p.size(); i++)

  {

  string str="";

  for(int j=i; j<i+z.size()&&j<p.size(); j++) str+=p[j];

  if(str==z)

  {

  printf("YES\n");

  flag=1;

  return;

  }

  if(!hash[str])

  {

  hash[str]=1;

  s[rear++]=str;

  }

  }

  }

  void bfs()

  {

  hash.clear();

  s[0]=w;

  hash[w]=rear=1;

  front=0;

  if(s[front].size()>=z.size()) judge(s[front]);

  if(!flag) while(front<rear)

  {

  string str="";

  for(int i=0; i<s[front].size(); i++)

  if(s[front][i]=='a') str+=a;

  else str+=b;

  judge(str);

  if(flag) return;

  front++;

  }

  }

  int main()

  {

  #ifndef ONLINE_JUDGE

  freopen("a.txt", "r", stdin);

  #endif

  while(cin》a》b》w》z)

  {

  flag=0;

  bfs();

  if(!flag) printf("NO\n");

  }

  return 0;

  }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++文件操作 下一篇C++开发驱动中的重载问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: