hdu 1686 kmp统计匹配数

来源:互联网 发布:淘宝手机端装修模板 编辑:程序博客网 时间:2024/06/05 19:57

裸题,直接计数就可以

#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#define MAX 1000707using namespace std;void get_next ( char p[] , int next [] ){    int i = 0 , k = -1 , len = strlen ( p );    next[0] = -1;    while ( i < len )        if ( k == -1 || p[i] == p[k] )            i++,k++,next[i]=k;        else k = next[k];}int ans,t;char s[MAX],p[MAX/100];int match ( char s[] , char p[] ){    int next[MAX/100];    ans = 0;    get_next ( p , next );    int len1 = strlen ( s );    int len2 = strlen ( p );    int i = 0 , j = 0;    while ( i < len1 )    {        if ( j == -1 || s[i] == p[j] ) i++,j++;        else j = next[j];        if ( j == len2 ) ans++;    }    return ans;}int main ( ){    scanf ( "%d" , &t );    while ( t-- )    {        scanf ( "%s" , p );        scanf ( "%s" , s );        printf ( "%d\n" , match ( s , p ) );    }}


0 0
原创粉丝点击