zoukankan      html  css  js  c++  java
  • hdu 1711 Number Sequence

    这个更是比较简单,就是找一个串在另一个串是否有出现,如果没有出现,输出-1,如果出现了,输出index,如果出现多次,输出最小的那个index。下面是我的代码:

    ac代码:

    View Code
    #include <algorithm>
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
    #include <limits.h>
    #include <stdio.h>
    #include <math.h>
    #include <vector>
    #include <queue>
    #include <stack>
    
    using namespace std;
    
    const int maxt=1000001;
    const int maxp=10001;
    
    int p[maxp],t[maxt],nextval[maxp];
    int n,m;
    
    void get_nextval()
    {
        int i,j;
        nextval[1]=0;
        i=1,j=0;
        while(i<m)
        {
            if(j==0||p[i]==p[j])
            {
                i++;
                j++;
                if(p[i]!=p[j]) nextval[i]=j;
                else nextval[i]=nextval[j];
            }
            else j=nextval[j];
        }
    }
    
    int match()
    {
        int i,j;
        i=1,j=1;
        while(i<=n&&j<=m)
        {
            if(j==0||t[i]==p[j])
            {
                i++;
                j++;
            }
            else j=nextval[j];
        }
        if(j==m+1) return i-m;
        else return -1;
    }
    
    int main()
    {
        int ncas;
        scanf("%d\n",&ncas);
        while(ncas--)
        {
            scanf("%d %d",&n,&m);
            for(int i=1;i<=n;i++)
                scanf("%d",&t[i]);
            for(int i=1;i<=m;i++)
                scanf("%d",&p[i]);
            get_nextval();
            printf("%d\n",match());
        }
        return 0;
    }

    欢迎批评指正。谢谢!

    勸君惜取少年時&莫待無花空折枝
  • 相关阅读:
    Linux文件系统
    Linux用户和用户管理
    Linux磁盘管理
    vi编辑器
    Linux常用命令
    Linux进程管理
    servlet运行过程
    http的get和post方法的区别
    千元机小荐
    JavaScript 正则表达式(Reg Exp)
  • 原文地址:https://www.cnblogs.com/RainingDays/p/2766495.html
Copyright © 2011-2022 走看看