zoukankan      html  css  js  c++  java
  • KMP--路过

    HDU 1358:弄清楚了NEXT,就好解决,还有不要再循环中用strlen;会超

    ----------------------我是凑字数的------------------还是不会KMP------------------------------- 

    HDU: 1711,模板题把,可惜还是不是很理解。

            再来一发matrix67的KMP算法解释:召唤门:http://www.matrix67.com/blog/archives/115 

            一个模板:#include<stdio.h>

    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    #define N 1000005
    int next[N],a[N],b[N];
    int n,m;

    void kmp()
    {
        next[0]=-1;
        int k=-1;
        int i=0;
        while (i<m)
        {
            if (k==-1||b[k]==b[i])
            {
                i++,k++;
                next[i]=k;
               // printf("%d ",k);
            }
            else k=next[k];
        }
        for (int i=0;i<=m;i++) printf("%d ",next[i]);
    }

    int getkmp()
    {
        int k=0,i=0;
        if (n<m) return -1;
        while (i<n&&k<m)
        {
            if (k==-1||a[i]==b[k])
            {
                k++,i++;
                if (k==m) return i-m+1;
            }
            else k=next[k];
        }
        return -1;
    }

    int main()
    {
        int t;
        scanf("%d",&t);
        while (t--)
        {
            scanf("%d%d",&n,&m);
            for (int i=0;i<n;i++) scanf("%d",&a[i]);
            for (int i=0;i<m;i++) scanf("%d",&b[i]);
            memset(next,0,sizeof(next));
            kmp();
          //  for (int i=0;i<=m;i++) printf("%d ",next[i]);
           
    // printf("%d ",getkmp());
        }
        return 0;

    } 

    这题的HASH做法很神奇:挑战程序设计那本书真的很棒,^^///,滚动哈希真的不会有冲突吗? 

  • 相关阅读:
    170829-关于AOP面向切面编程
    170826-关于spring的知识点及练习
    170814-17关于javaweb的知识点
    scrapy之手机app抓包爬虫
    tornado之WebSocket
    Tornado异步(2)
    tornado异步(1)
    爬虫之动态HTML处理(Selenium与PhantomJS )动态页面模拟点击
    爬虫之动态HTML处理(Selenium与PhantomJS )执行 JavaScript 语句
    爬虫之动态HTML处理(Selenium与PhantomJS )网站模拟登录
  • 原文地址:https://www.cnblogs.com/forgot93/p/3741332.html
Copyright © 2011-2022 走看看