当前位置: 代码迷 >> 综合 >> hdu - 4639 - Hehe(斐波那契数)
  详细解决方案

hdu - 4639 - Hehe(斐波那契数)

热度:4   发布时间:2024-01-10 13:30:18.0

题意:“hehe”可以有两种一意思,输入一个句子,问这个句子有多少种意思,共T组测试数据(T <= 100,句子长度 <= 10086,都是小写字母)。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4639

——>>找he连续出现多少次,其意思种数符合斐波那契数列,两段不连续的he之间用乘法。

#include <cstdio>
#include <cstring>using namespace std;const int maxn = 10086 + 10;
const int mod = 10007;
char s[maxn], buf[maxn];
int f[maxn];void getF(){        //斐波那契数列打表f[0] = 1;f[1] = 1;for(int i = 2; i < maxn; i++){f[i] = (f[i-1] + f[i-2]) % mod;}
}int main()
{int T, kase = 1, i;scanf("%d", &T);while(T--){getF();scanf("%s", s);int len = strlen(s), m = 0;for(i = 0; i < len-1; i++){if(s[i] == 'h' && s[i+1] == 'e'){buf[m++] = 'A';i++;}else buf[m++] = s[i];}int cnt = 0, ret = 1;for(i = 0; i < m; i++){if(buf[i] == 'A') cnt++;else if(cnt != 0){ret = ret * f[cnt] % mod;cnt = 0;}}if(buf[m-1] == 'A') ret = ret * f[cnt] % mod;printf("Case %d: %d\n", kase++, ret);}return 0;
}