Happy 2009
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3290 Accepted Submission(s): 1077
Each test case included one string. There are made up of ‘a’-‘z’ or blank. The length of string will not large than 10000.
hopppayppy happy happ acm y hahappyppy
2 12
题意分析:这题要注意happy的顺序不能变,所以要最先产生h然后a然后p,p,y,给每个字母都对应一个数组的数,要产生a时必须有h,要产生p时必须有a,要产生happy时,必须有一个h,一个a,两个p,一个y;而且要保证所有的happy都没颠倒次序,所以每一个字母的个数不能超过前面那个字母的个数( 例如hayppahppy,这种只有一个 )
AC代码:
#include<stdio.h> #include<string.h> int n,num[5]; char str2[100005];//happy void cal( ) { int k = 0; while( str2[k] ) { if( str2[k] == 'h' ) ++num[0]; if( str2[k] == 'a' && num[0] && num[1] < num[0] ) num[1]++; if( str2[k] == 'p' && num[1] && ( num[2] < 2 * num[1] ) ) num[2]++; if( str2[k] == 'y' && num[2] >= 2 && num[1] && num[0] ) { ++n; num[0] -= 1; num[1] -= 1; num[2] -= 2; } ++k; } } int main( ) { while( gets( str2 ) ) { memset( num,0,sizeof( num ) ); n = 0; cal( ); printf( "%d\n",n ); } return 0; }