hdu 4639 2013多校第四场 hehe Fibonacci 数列,组合计数,字符串处理
题目地址: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; } }