zoukankan      html  css  js  c++  java
  • codeforces 25 E Test KMP

    题意:求一个最短字符串包含所给的三个子串,输出最短长度

    思路:用KMP求出任意两个子串的前缀和后缀公共部分的最大长度

    #include <cstdio>
    #include <cmath>
    #include <iostream>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    int len[4],d[4][4];
    char s[4][200005];
    int Next[300005];
    int KMP(char s[],int len)
    {
        int n=strlen(s),i,j;
        memset(Next,0,sizeof(Next));
        for(i=1;i<n;i++)
        {
            j=Next[i-1];
            while(j>0&&s[i]!=s[j]) j=Next[j-1];
            if(s[i]==s[j]) j++;
            Next[i]=j;
            if(j==len) return len;
        }
        return Next[n-1];
    }
    int main()
    {
        int i,j,k,m,n,ans;
        while(~scanf(" %s",s[1]))
        {
            memset(d,0,sizeof(d));
            scanf(" %s",s[2]);
            scanf(" %s",s[3]);
            len[1]=strlen(s[1]);
            len[2]=strlen(s[2]);
            len[3]=strlen(s[3]);
            for(i=1;i<=3;i++)
            {
                for(j=1;j<=3;j++)
                {
                    if(i==j) continue;
                    memset(s[0],0,sizeof(s[0]));
                    strcpy(s[0],s[i]);
                    s[0][len[i]]='#';
                    strcat(s[0],s[j]);
                    d[i][j]=KMP(s[0],len[i]);
                }
            }
            ans=999999999;
            for(i=1;i<=3;i++)
            {
                for(j=1;j<=3;j++)
                {
                    for(k=1;k<=3;k++)
                    {
                        if(i==j||i==k||j==k) continue;
                        int tp=len[i]+len[j]+len[k]-d[i][j];
                        if(d[i][j]==len[i]) tp-=d[k][j];
                        else tp-=d[k][i];
                        ans=min(ans,tp);
                    }
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    python函数
    文件操作
    python列表,元组,字典,集合简介
    python字符串(str)
    python数字类型 or 进制转换
    流程控制
    Python入门
    Python垃圾回收机制
    python简介&下载&安装
    DAY11
  • 原文地址:https://www.cnblogs.com/zuferj115/p/5328640.html
Copyright © 2011-2022 走看看