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做法很神奇:挑战程序设计那本书真的很棒,^^///,滚动哈希真的不会有冲突吗? 

  • 相关阅读:
    Windows系统创建符号链接文件
    msi软件包无法安装
    删除我的电脑里面软件快捷方式
    本地连接速度100.0mbps变10.0mbps如何恢复
    如何清理多余的Windows桌面右键菜单
    Windows免密码远程桌面
    Win8节省C盘空间攻略
    利用FTP将Linux文件备份到Windows
    Windows服务器之间rsync同步文件
    解决“Word无法访问您试图使用的功能所在的网络位置”问题
  • 原文地址:https://www.cnblogs.com/forgot93/p/3741332.html
Copyright © 2011-2022 走看看