程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 310 - L--system

310 - L--system

編輯:C++入門知識

[cpp]   描述:題意很簡單,不過要是想要通過看題明白確實挺麻煩的,就是給你一個開始字符串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;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved