大意:给你一个字符串,字符串中的hehe可以换成wqnmlgb,问有几种换发?
思路:
1、由分析不难得出连续的he出现的时候f[n]=f[n-1]+f[n-2]。
2、扫描字符串,利用上面算出的f[n]对字符串中出现的hehe进行计算即可
3、各个不连续的hehe串的f[]乘起来就得到了。
代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 10100 #define M 5050 #define MOD 10007 using namespace std; int main () { int t, i, j = 1; int len, sum, num; int a[M]; char b[N]; a[0] = a[1] = 1; for (i=2; i<M; i++) a[i] = (a[i-1] + a[i-2]) % MOD; scanf ("%d", &t); while (t --) { scanf ("%s", b); num = 0; sum = 1; len = strlen (b); for (i=0; i<len-1; i++) if (b[i]=='h' && b[i+1]=='e') num ++, i++; else { sum = sum * a[num] % MOD; num = 0; } if ( num ) sum = sum * a[num] % MOD; printf ("Case %d: %d ", j++, sum); } return 0; }