此题为递推题 现场比赛中由于心态问题没能快速推出来
定义f[i]为i个连续的he可以表示的语意的个数 则如果第i个he单独考虑f[i]=f[i-1];
如果将第i个he和第i-1个he组合 则其只能表示为wqnmlgb 不然肯定会和前面一种情况重复
代码如下:
#include<iostream> #include<cstdlib> #include<cstdio> #include<fstream> #include<string> using namespace std; #define M 10007 int f[10100]; int result; void init() { f[0]=0; f[1]=0; f[2]=2; f[3]=3; for(int i=4;i<=10086;i++) f[i]=(f[i-1]+f[i-2])%M; } int main() { string s; int t; //freopen("hdu4639.txt","r",stdin); cin>>t; init(); int k=1; while(t--) { int count=0; cin>>s; result=1; for(int i=0;i<s.length();) { if(s[i]=='h'&&s[i+1]=='e') {count++;i+=2;} else{ if(count>=2) result=(result*f[count])%M; i++;count=0; } } if(count>=2) result=(result*f[count])%M; cout<<"Case "<<k++<<": "<<result<<endl; } return 0; }