zoukankan      html  css  js  c++  java
  • [vijos 1677] 陶陶的名字(kmp) 标签: kmpvijos 2017-05-13 09:36 67人阅读 评论(0)

    背景

    陶陶是一个智能机器人,他能像人一样思考问题,不过由于IQ问题,他给自己取了一个很长很长的名字。
    描述

    某一天,陶陶想把自己的名字涂在墙上。由于他的名字太长,为了省事,他从自己名字的开头截取了一段作为模板。我们不妨设这个模板的长度为l,陶陶的名字的长度为L,那么有1≤l≤L。然后陶陶会用这个模板进行若干次喷涂,喷出自己的名字(后一次喷涂会覆盖前一次喷涂的结果,例如当前墙上已经有abc三个字符,那么如果在c处进行喷涂,就会得到ababc)。陶陶喷涂名字总是从前向后喷的,假设陶陶喷涂了k次,这k次喷涂按时间顺序第i次喷涂的位置是s[i],那么s[i]

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #include<stack>
    #include<iostream>
    using namespace std;
    char t[1000100];
    int len;
    int Next[1000100];
    int ans[1000100];
    void makeNext(){
        Next[1]=0;
        int i=1,j=0;
        while(i<=len){
            if(j==0||t[i]==t[j]){
                i++;j++;
                Next[i]=j;
            }
            else j=Next[j];
        }
    }
    int main(){
        //freopen("in.txt","r",stdin);
        scanf("%s",t+1);
            len=strlen(t+1);
            makeNext();
            int k;
            for(int i=len+1;i>=1;i--)
                if(Next[i]==1){//从后往前 找到next[i]==1的情况
                    k=i-1;
                    break;  
                }
            int ans=len;//判断超出的情况
            while(Next[ans+1]-1>=k) ans=Next[ans+1]-1;
            printf("%d",ans);
        return 0;
    }
    
  • 相关阅读:
    微信小程序scroll-viwe遇到的问题
    微信小程序缓存
    微信刷新数据不刷新页面的另一个方法
    微信小程序中无刷新修改
    Bayesian
    深度学习(七)object detection
    深度学习(十二)wide&deep model
    深度学习(十)训练时的调参技巧
    深度学习(九)过拟合和欠拟合
    深度学习(二)常见概念
  • 原文地址:https://www.cnblogs.com/xljxlj/p/7183665.html
Copyright © 2011-2022 走看看