題目大意:
有n個字串,每個字元為a或
b ,第
i個字串可以表示為若干個a,
b 和整數j(
j(表示第
j個字串
) 的組合。
給定乙個新的字串
s ,求s在第
n 個字串中出現了多少次。
分析:
很顯然的乙個遞推關係,處理一下合併的情況就好了,細節有一些,而且要用高精度。
ac code:
#include
#include
#include
#include
#include
#include
#define debug(...) (fprintf(stderr, __va_args__))
using
namespace
std;
const
int maxn = 39;
const
int mod = 1e9;
int n;
int ls;
string s;
string pre[maxn], suf[maxn];
struct bi
void shift()
while(a[len+1])
while(!a[len] && len) len--;
if(!len) len = 1;
}friend bi operator + (const bi &a, const bi &b)
friend bi operator + (const bi &a, int k)
friend
bool
operator > (const bi &a, int k)
if(a.len > b.len) return
true;
else
if(a.len < b.len) return
true;
else
}void print()
}f[maxn], l[maxn];
int count(const
string &str)
int main()
suf[i] += suf[j];
if(suf[i].size() > ls-1)
suf[i] = suf[i].substr(suf[i].size()-ls+1, ls-1);
f[i] = f[i]+f[j], l[i] = l[i]+l[j], tmp += pre[j];
if(l[j] > ls-1)
}else
}if(tmp.size()) f[i] = f[i]+count(tmp);
}f[n].print();
#ifndef online_judge
fclose(stdin);
fclose(stdout);
#endif
return
0;}