题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4639
题目思路: 首先我们取出所有he这样的东西,考察连续的k个“he"串,通过找规律+数学归纳法容易证明有f【k】种方式,其中f为Fibonacci数列, 那么再统计这个串中有多少个这样的块就可以了,他们乘起来。
代码:
#include<iostream>
#include<string>
using namespace std;;
int p[10000];
void pre()
{
p[1]=1;
p[2]=2;
for(int i=3;i<10000;i++)
p[i]=(p[i-1]+p[i-2])%10007;
}
int main()
{
pre();
int T;
cin>>T;
string s;
int index=0;
while(T--)
{
index++;
cin>>s;
int length=s.length();
if(length<2)
{
cout<<1<<endl;
continue;
}
long long ans=1;
s+="xx";
int count=0;
for(int i=0;i<=length-2;i++)
{
if(s[i]=='h'&&s[i+1]=='e')
{
count++;
if(s[i+2]=='h'&&s[i+3]=='e')
{
i++;
continue;
}
else
{
ans=(ans*p[count])%10007;
count=0;
}
}
}
cout<<"Case "<<index<<": "<<ans<<endl;
}
}