码迷,mamicode.com
首页 > 其他好文 > 详细

Hdoj 1686 Oulipo

时间:2016-05-12 10:24:39      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

 

/*
Problem :
Status  :

By wf,
*/

#include "algorithm"
#include "iostream"
#include "cstring"
#include "cstdio"
#include "string"
#include "stack"
#include "cmath"
#include "queue"
#include "set"
#include "map"

#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1

typedef long long ll;
using namespace std;

const int inf=0x3f3f3f3f;
const int maxn=1e6+5;


char sub[10000+5];
char str[maxn];

//刘汝佳
int f[10000+5];
void getFail(char* P,int * f)
{
    int m = strlen(P);
    f[0]=0;f[1]=0;
    for(int i=1;i<m;++i)
    {
        int j = f[i];
        while(j && P[i]!=P[j])j=f[j];
        f[i+1] = P[i]==P[j] ? j+1 :0;
    }
}

void kmp(char*T,char * P,int *f)
{
    int ret = 0;
    int n = strlen(T),m = strlen(P);
    getFail(P,f);
    int j=0;
    for(int i=0;i<n;++i)
    {
        while(j && P[j]!=T[i]) j = f[j];
        if(P[j]==T[i])j++;
        if(j==m)
        {
            ret++;
            //printf("%d\n",i-m+1);
        }

    }
    printf("%d\n",ret);
}

/*
kuangbin
void getFail(char P[],int f[])
{
    int m = strlen(P);
    int i=0,j=-1;
    f[0]=-1;
    while(i<m)
    {
       while(-1!=j && P[i]!=P[j])j=f[j];
       f[++i]=++j;
    }
    for(int i=0;i<m;++i)printf("%d ",f[i]);
    printf("\n");
}

void kmp(char T[],char P[],int f[])
{
    int ret = 0;
    int n = strlen(T),m = strlen(P);
    //printf("n==%d , m==%d\n",n,m);
    getFail(P,f);
    int i=0,j=0;
    while(i<n )
    {
        while(-1!=j && T[i]!=P[j])j=f[j];
        ++i;++j;
        if(j>=m)
        {
            ret++;
            j=f[j];
        }
    }
    printf("ret==%d\n",ret);
}
*/

int main()
{
    //freopen("in.txt","r",stdin);
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",&sub);
        scanf("%s",&str);
        //printf("%s\n",sub);
        //printf("%s\n",str);
        kmp(str,sub,f);
    }

    return 0;
}

  

Hdoj 1686 Oulipo

标签:

原文地址:http://www.cnblogs.com/bruce27/p/5484541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!