居然在最后的输出形式那里卡了很久,忘记除10007,忘记输出Case 希望下次不要犯这种错误
#include "iostream" #include "string.h" using namespace std; int f[10100][100],maxb=0; char list[110][10100]; int max(int a,int b){return a>b?a:b;}void work(){int i,count,flag,j,num;memset(f,0,sizeof(f));f[0][0]=1;f[1][0]=1;f[2][0]=2;f[3][0]=3;count=1;for(i=4;i<=maxb;i++){flag=0;for(j=0;j<count;j++){f[i][j]=f[i-1][j]+f[i-2][j]+flag;flag=f[i][j]/10;f[i][j]=f[i][j]%10;}if(flag!=0){f[i][j]=flag;count++;}flag=0;if(f[i][4]>=1){flag=1;if(f[i][3]>=0){flag=1;if(f[i][2]>=0){flag=1;if(f[i][1]>=0){flag=1;if(f[i][0]>=7){flag=1;}}}}}if(flag){num=f[i][4]*10000+f[i][3]*1000+f[i][2]*100+f[i][1]*10+f[i][0];num=num%10007;f[i][4]=num/10000;num=num%10000;f[i][3]=num/1000;num=num%1000;f[i][2]=num/100;num=num%100;f[i][1]=num/10;f[i][0]=num%10;}count=4;//cout<<"* ";cout<<i<<' ';for(j=count-1;j>=0;j--)cout<<f[i][j];cout<<endl; } }int chang(int a){return f[a][4]*10000+f[a][3]*1000+f[a][2]*100+f[a][1]*10+f[a][0]; }void work1(int a){int data=0,number=1,i;for(i=0;i<strlen(list[a]);i++){if(list[a][i]=='h'&&list[a][i+1]=='e'){data++;i++;}else {// cout<<data<<" ++++ "<<i<<endl;number*=chang(data);if(number>10007)number=number%10007;data=0;}}//cout<<data<<"()"<<endl;if(data!=0)number*=chang(data);if(number>10007)number=number%10007;cout<<"Case "<<a<<": "<<number<<endl; }int main(){int Case,i=1;cin>>Case;while(Case--){cin>>list[i];maxb=strlen(list[i]);work();work1(i);i++;} }