zoukankan      html  css  js  c++  java
  • Seek the Name, Seek the Fame

    题目大意:小猫是非常有名气的,所以很多父母都来找它给孩子取名字,因为找的人比较多,小猫为了摆脱这个无聊的工作,于是它发明了一种取名字的办法,它把孩子父母的名字合在一起,然后从这个名字里面找一个前缀,并且这个前缀也得是后缀,然后用它当孩子的名字,比如父亲的名字是:ala,母亲的名字是la, 那么孩子的名字就可以是“a”,“ala”,“alala”, 现在想知道孩子的名字可以多长?

     
    分析:最长的那个一定是字符串的长度,第二长的就是前缀后缀的最大匹配度 next[N],第三长的就是next[next[N]],一直递归下去,直到等于0。
    下面是AC代码
    =========================================================================================
    #include<stdio.h>
    #include<string.h>
    
    const int MAXN = 1e6+7;
    const int oo = 1e9+7;
    
    char s[MAXN];
    int next[MAXN], ans[MAXN];
    
    void GetNext(int N)
    {
        int i=0, j=-1;
        next[0] = -1;
    
        while(i < N)
        {
            if(j==-1 || s[i]==s[j])
                next[++i] = ++j;
            else
                j = next[j];
        }
    }
    
    int main()
    {
    
        while(scanf("%s", s) != EOF)
        {
            int N = strlen(s), k=0;
    
            GetNext(N);
    
            ans[k++] = N;
    
            while(next[N] != 0)
            {
                ans[k++] = next[N];
                N = next[N];
            }
    
            for(int i=k-1; i>=0; i--)
            {
                printf("%d%c", ans[i], i ?' ':'
    ');
            }
        }
    
        return 0;
    }
  • 相关阅读:
    webstorm 2017 激活破解
    落在纸上的思考
    Mysql数据库备份脚本
    asp.net c# 打开新页面或页面跳转
    转正专业考试
    关于mysql-5.7.23-winx64.msi的安装
    win server 2012 R2 你需要先安装 对应于 KB2919355 的更新
    零碎
    按钮
    猪猪公寓——冲刺第一天
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4730987.html
Copyright © 2011-2022 走看看