• Jack's Last Word


    http://acm.timus.ru/problem.aspx?space=1&num=1684

    kmp

    View Code
    const int MM = 1111111;
    #define debug puts("wrong")
    typedef __int64 int64;
    char str[MM], ch[MM];
    int n,m;
    int fail[MM], ans[MM], cnt;
    
    void get_next(int n) {
        int i, j=-1;
        for(fail[0]=-1, i=1;i < n; i++) {
            while(j>=0 && str[i]!=str[j+1])  j=fail[j];
            if(str[j+1]==str[i])  j++;  
            fail[i]=j;
        }
    }
    
    void get_data() {
        int i,j,k;
        gets(str); gets(ch);
        n=strlen(str), m=strlen(ch);
        get_next(n);
    }
    void solve() {
        int i,j=-1,k,len=0;
        bool ff=true, flag=true;
        cnt=0;
        ans[cnt++]=0;
        for(i=0;i<m;i++) {
            ff=true;
            if(ch[i]!=str[j+1]) len=j+1,ff=false;
            while(j>=0 && ch[i]!=str[j+1]) j=fail[j];
            if(!ff) ans[cnt++]=i-j-1;//printf("%d %d %d\n",j,i,len);
            if(ch[i]==str[j+1]) j++;
            else {
                //printf("%d\n",i);
                flag=false;
                break;
            }
        }
        
        puts(flag?"No":"Yes");
        if(flag) {
        //    for(i=0;i<cnt;i++) printf("%d ",ans[i]); printf("\n");
            for(i=0;i<cnt-1;i++) {
                for(j=ans[i];j<ans[i+1];j++) printf("%c",ch[j]);
                printf(" ");
            }
            for(i=ans[cnt-1];i<m;i++) printf("%c",ch[i]);
            printf("\n");
        }
    }
    int main() {
        get_data(),solve();
        return 0;
    }
    /*
    abracadabra
    abrabracadb
    
    abcd
    aa
    */
  • 相关阅读:
    centos7搭建nexus
    centos7搭建ftp
    tomcat笔记
    mysql跨服务器触发器
    IntelliJ IDEA笔记
    node.js笔记
    myeclipse笔记
    术语
    centos7安装mysql
    js跨域访问资源
  • 原文地址:https://www.cnblogs.com/zhang1107/p/3041343.html
Copyright © 2020-2023  润新知