uva310 L-system L系统 哈希判重又TLE

2014-11-24 02:00:37 · 作者: · 浏览: 1
这道题经过我反复试验发现,用哈希判重就是TLE,直接用map标记不会超时,感觉是哈希函数设计的不好,如果一位一位去计算确实复杂度有点高,最高可以有15位呢。。
题意不太好懂,意思就是从给定的串中(第三行)遇到a就替换成输入第一行的某个非空子集,遇到b替换成输入第二行的某个非空子集,问是否可以生成第四行的字符串。
我的做法是参考了别人的代码的,就是遇到a就替换成第一行,遇到b就替换成b,然后判断新字符串的子串是否有符合要求的,这样做思路上确实要简单好理解一点。当然还有一种思路就是替换时就替换成子串,那样需要遍历子串,书上也有相应的算法,不难实现。
//12:27  
#include  
#include  
#include  
#include  
#include  
using namespace std;  
  
  
//const int MAXSIZE = 1 <<16;  
map hashmap;  
string a,b,w,g,S[230000];  
int front,rear;  
bool flag;  
  
  
  
  
void is_contain(string ns)  
{  
    for (int i=0;i
=g.size()) is_contain(w); if (flag) return; while (front>a>>b>>w>>g) { bfs(); if (!flag) cout<<"NO"<