这题意思很清楚,不过我们也可以通过样例知道!思路是:只要出现metal,然后前面出现几个heavy就可以组合成几种!
这里有两种答案:
一:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1000000+10;
char a[3][6]= {"heavy","metal"};
char s[maxn];
int main()
{
while(cin>>s)
{
__int64 f=0;
__int64 sum=0;
for(int i=0; s[i]!='\0'; i++)
{
if(strncmp(a[0],s+i,5)==0)//这里利用了strncmp函数!
{
f++;
}
else if(strncmp(a[1],s+i,5)==0)
{
sum+=f;
}
}
printf("%I64d\n",sum);
}
return 0;
}
二:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[2][6]={"heavy","metal"};
const int maxn=1000005;
char s[maxn];
int main()
{
int i;
while(cin>>s)
{
__int64 f=0;
__int64 sum=0;
for(i=0; s[i]!='\0'; i++)
{
if(s[i]==a[0][0]&&s[i+1]==a[0][1]&&s[i+2]==a[0][2]&&s[i+3]==a[0][3]&&s[i+4]==a[0][4])
{
f++;
i+=4;
}
else if(s[i]==a[1][0]&&s[i+1]==a[1][1]&&s[i+2]==a[1][2]&&s[i+3]==a[1][3]&&s[i+4]==a[1][4])
{
sum+=f;
i+=4;
}
}
printf("%I64d\n",sum);
}
return 0;
}