• 学密码学一定得学程序 KMP


    学密码学一定得学程序

    题目描述

    曾经,ZYJ同学非常喜欢密码学。有一天,他发现了一个很长很长的字符串S1。他很好奇那代表着什么,于是神奇的WL给了他另一个字符串S2。但是很不幸的是,WL忘记跟他说是什么意思了。这个时候,ZYJ不得不求助与伟大的ZP。ZP笑了笑说,这个很神奇的,WL的意思是只要你找到她给你的字符串在那个神奇的字符串的位置,你就会有神奇的发现。ZYJ恍然大悟,原来如此,但是悲剧来了,他竟然不知道怎么找。。。。是的,很囧是不是。所以这时候就需要化身为超级玛丽亚的你现身了,告诉他吧。。。。。。

    输入

     

    首先输入一个n。表示有n组测试数据。

    每组测试数据有两行。

    第一行为字符串S1,长度不大于1000000。

    第二行为字符串S2,长度不大于10000,并且长度不小于2。

    输出

     

    输出S2在S1的位置。如果有多个位置,只输出第一个位置。

    如果找不到,就输出“::>_<::“(不输出双引号)。

    示例输入

    1
    ASDFGDF
    DF
    

    示例输出

    3
    #include<stdio.h>
    #include<string.h>
    #define inf 1000001
    #define dfs 10001
    char str1[inf], str2[dfs];
    int next[dfs];
    void GetNext(char* p,int next[])
    {
        int pLen = strlen(p);
        next[0] = -1;
        int k = -1;
        int j = 0;
        while (j < pLen - 1)
        {
            if (k == -1 || p[j] == p[k])
            {
                ++k;
                ++j;
                next[j] = k;
            }
            else
               k = next[k];
        }
    }
    int KmpSearch(char* s, char* p)
    {
        int i = 0;
        int j = 0;
        int sLen = strlen(s);
        int pLen = strlen(p);
        while (i < sLen && j < pLen)
        {
            if (j == -1 || s[i] == p[j])
            {
                i++;
                j++;
            }
            else
                j = next[j];
        }
        if (j == pLen)
            printf("%d
    ", i - j + 1);
        else
            printf("::>_<::
    ");
        return 0;
    }
    int main(){
        int n;
        scanf("%d", &n);
        while(n--) {
            scanf("%s%s", &str1, &str2);
            GetNext(str2, next);
            KmpSearch(str1, str2);
        }
        return 0;
    }
    


  • 相关阅读:
    Dual Quaternion Knowledge Graph Embeddings——对偶四元数知识图谱嵌入
    Python argparse模块
    Pythonvirtualenv创建虚拟环境
    KBGAN:用于知识图谱嵌入的对抗学习
    anaconda简单使用
    二分查找详解
    Quaternion Knowledge Graph Embeddings —— 基于四元数的知识图谱嵌入
    ConvR——用于多关系学习的自适应卷积模型
    Under Any Linux: install bypy tool
    PRUNE_BIND_MOUNTS="yes"不好用, 什么原因呢?
  • 原文地址:https://www.cnblogs.com/Genesis2018/p/9079873.html
Copyright © 2020-2023  润新知