hdu2087-剪花布条

来源:互联网 发布:无限极工资知乎 编辑:程序博客网 时间:2024/05/07 08:08

http://acm.hdu.edu.cn/showproblem.php?pid=2087

stl_strng

#include<iostream>#include<string>#include<cmath>using namespace std ;int main(){int temp , sum ;string str1 , str2 ;while( cin >> str1 && str1 != "#" ){cin >> str2 ;sum = temp = 0 ;while(( temp = str1.find( str2 , temp )) != string::npos ){sum++ ;temp += str2.size();}cout << sum << endl ;}return 0 ;}

kmp

#include<vector>#include<list>#include<map>#include<set>#include<deque>#include<stack>#include<bitset>#include<algorithm>#include<functional>#include<numeric>#include<utility>#include<sstream>#include<iostream>#include<iomanip>#include<cstdio>#include<cmath>#include<cstdlib>#include<cstring>#include<ctime>using namespace std;const int maxn = 50005 ;int next[ maxn ] , ex[ maxn ] ;char str1[ maxn ] , str2[ maxn ] ;int len1 , len2 ;void getNext(char *T){    int j,k;    k=1;    j=0;    while(k<len2)    {        if(j==0 ||T[k]==T[j])        {            ++j;            ++k;            if(T[ k ] == T[ j ] )                next[ k ] = next[ j ] ;            else                next[k]=j;        }        else j=next[j];    }}int get_ex(char *ob,char *sub){       int k , j ;    j=0;    k=0;   int  sum = 0 ;    while(k<=len1)    {        if(j==0||ob[k]==sub[j])        {            if( j == len2 )            {                sum++ ;                j = 0 ;            }            ++j;            ++k;            //ex[i]=k;        }        else             j=next[j];    }    return sum ;}int main(){    while( scanf( "%s" , str1 + 1 ) != EOF && str1[ 1 ]  != '#' )    {        scanf( "%s" ,str2 +1 ) ;        len1 = strlen( str1 + 1) ;        len2 = strlen( str2 + 1);        getNext(str2);        int ans = get_ex( str1 ,str2 );        printf( "%d\n",ans);        }return 0;}


原创粉丝点击