HDU4639

 1 /*计算里面有多少个相邻的he,1个he就是1种意思,两个就是,两种,所以这是
 2 一个斐波拉期数列,间隔的hehe互不影响所以是互斥事件,直接相乘就可以*/
 3 #include<stdio.h>
 4 #include<string.h>
 5 const int maxn=10086+10;
 6 const int mod=10007;
 7 int fb[maxn];
 8 void init()
 9 {
10     int i;
11     fb[0]=fb[1]=1;
12     for(i=2;i<maxn;i++)
13     {
14         fb[i]=(fb[i-1]+fb[i-2])%mod;
15     }
16 }
17 int main()
18 {
19     int i,m;
20     int t;
21     int ca=0;
22     char s[maxn];
23     init();
24     scanf("%d",&t);
25     while(t--)
26     {
27         int ans=1;
28         scanf("%s",s);
29         m=strlen(s);
30         for(i=0;i<m;i++)
31         {
32             int k=0;
33             if(s[i]=='h' && s[i+1]=='e')
34             {
35                 k=1;
36                 i=i+2;
37                 while(s[i]=='h'&&s[i+1]=='e'&&i<m-1)
38                 {
39                     k++;
40                     i=i+2;
41                 }
42                 //printf("%d ",k);
43             }
44             ans=(ans*fb[k])%mod;
45             //printf("%d
",fb[k]);
46         }
47         printf("Case %d: %d
",++ca,ans);
48     }
49     return 0;
50 }
原文地址:https://www.cnblogs.com/okboy/p/3231205.html