读书人

310 - L-system

发布时间: 2013-01-05 15:20:39 作者: rapoo

310 - L--system

描述:题意很简单,不过要是想要通过看题明白确实挺麻烦的,就是给你一个开始字符串w和最终字符串z,字符串中只有a与b,如果遇到a就替换成第一个字符串,遇到b就替换成第二个字符串,问这样的替换方式能否构成一个形如 xzy 的字符串(x,y,可为空);#include <iostream>#include <cstdio>#include <cstring>#include <map>#include <string>using namespace std;#define MAX 130000map<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;}

读书人网 >系统运维

热点推荐