zoukankan      html  css  js  c++  java
  • SDUT-3331_数据结构实验之串三:KMP应用

    数据结构实验之串三:KMP应用

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

    有n个小朋友,每个小朋友手里有一些糖块,现在这些小朋友排成一排,编号是由1到n。现在给出m个数,能不能唯一的确定一对值l和r(l <= r),使得这m个数刚好是第l个小朋友到第r个小朋友手里的糖块数?

    Input

    首先输入一个整数n,代表有n个小朋友。下一行输入n个数,分别代表每个小朋友手里糖的数量。

    之后再输入一个整数m,代表下面有m个数。下一行输入这m个数。

    Output

    如果能唯一的确定一对l,r的值,那么输出这两个值,否则输出-1

    Sample Input

    5
    1 2 3 4 5
    3
    2 3 4

    Sample Output

    2 4

    Hint

    Source

    windream

    KMP算法的简单应用,注意它要求的是唯一子串,当找到子串后要再用一次KMP确定这是唯一的子串。
    这道题很坑爹的没有给范围,所以按最大的来

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int Next[1000050],s1[1000050],s2[1000050],m,n;
    
    void get_next()
    {
        int i,j;
        i = 0;
        j = -1;
        Next[0] = -1;
        while(i<m)
        {
            if(j==-1||s2[i]==s2[j])
            {
                i++;
                j++;
                Next[i] = j;
            }
            else
                j = Next[j];
        }
    }
    
    int KMP(int x)
    {
        int i,j;
        get_next();
        i = x;
        j = 0;
        while(i<n)
        {
            if(j==-1||s1[i]==s2[j])
            {
                i++;
                j++;
            }
            else
                j = Next[j];
            if(j==m)
                return i - j + 1;
        }
        return -1;
    }
    
    int main()
    {
        int i,a,b;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d",&s1[i]);
        scanf("%d",&m);
        for(i=0;i<m;i++)
            scanf("%d",&s2[i]);
        a = KMP(0);
        if(a!=-1)
        {
            b = KMP(a);
            if(b==-1)
                printf("%d %d
    ",a,a+m-1);
            else
                printf("-1
    ");
        }
        else
            printf("-1
    ");
        return 0;
    }
    
  • 相关阅读:
    2019 滴滴java面试笔试总结 (含面试题解析)
    2019 阿里java面试笔试总结 (含面试题解析)
    Mangos笔记
    Google 多源码管理工具 gclient
    构建系统介绍
    Ninja介绍
    小试 Ninja
    如何使用Ninja快速编译LLVM和Clang
    FMS4中的P2P功能
    Flex之HTML5视频播放解决方案
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/9759112.html
Copyright © 2011-2022 走看看