zoukankan      html  css  js  c++  java
  • Theme Section---hdu4763(kmp, Next数组的运用)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4763

    题意就是求s串中满足EAEBE格式的E的最大长度;我们可以枚举前缀和后缀的所有匹配(k)看是否在s[k,len-k]中;

    如果不在它中间那么就让k=Next[k],刚开始想的是k--;但是这样循环次数有点多(本题数据太水,k--也能过);

    但是s[0,k-1]和s[len-k-1,len-1]不一定一样啊,如果是Next[k]的话那么前缀Next,即前缀的前缀和后缀肯定相等并且等于后缀的后缀(有点模

    糊好好想想就明白了。。。)

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    const int N = 1e6+7;
    
    int Next[N];
    char s[N], ss[N], sm[N];
    
    void GetNext(char s[], int n)
    {
        int i=0, j=-1;
        Next[0] = -1;
        while(i<n)
        {
            if(j==-1 || s[i]==s[j])
                Next[++i] = ++j;
            else
                j = Next[j];
        }
    }
    bool kmp(char a[], int n, char b[], int m)
    {
        int i=0, j=0;
        while(i < m)
        {
            if(j==-1 || a[j] == b[i])
                i++,j++;
            else
                j = Next[j];
            if(j == n)
                return true;
        }
        return false;
    }
    int main()
    {
        int n;
        scanf("%d", &n);
        for(int i=0; i<n; i++)
        {
            scanf("%s", s);
            int len = strlen(s);
            GetNext(s, len);
            int k = Next[len];
            while(k>len/3)k=Next[k];
            while(k>0)
            {
                memset(ss, 0,sizeof(ss));
                strncpy(ss, s, k);///一定不要忘记初始化;
                memset(sm, 0,sizeof(sm));
                strncpy(sm, s+k, len-2*k);
                if(kmp(ss, k, sm, len-2*k)==true)
                    break;
                else
                    k=Next[k];
            }
            printf("%d
    ", k);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    python笔记
    React+router和react+redux使用过程的记录
    jQuery源码分析随笔
    安装nodejs+ionic+cordova环境心得
    win10系统Nodejs安装包总是失败原因
    silverlight中dialogresult和close
    安卓HTTP访问的两种方式
    安卓Activity跳转的几种方式
    Android开发Content Provider
    web.xml中filter的用法
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4853736.html
Copyright © 2011-2022 走看看