zoukankan      html  css  js  c++  java
  • hdu 1867 A + B for you again kmp

    将两个字符串连接起来,中间加一个没出现过的字符,getfail一下,就是公共部分。

    #include <stdio.h>
    #include <string.h>
    char c[200100];
    char a[100100];
    char b[100100];
    int p[200100];
    int solve(int len1,char *a,int len2,char *b)
    {
        int len=1;
        int i,j;
        for(i=0;i<len2;i++) c[len++]=b[i];
        c[len]='Z';
        for(i=0;i<len1;i++) c[++len]=a[i];
        j=0;p[1]=0;
        for(i=2;i<=len;i++)
        {
            while(j>0&&c[i]!=c[j+1]) j=p[j];
            if(c[i]==c[j+1]) j++;
            p[i]=j;
        }
        return p[len];
    }
    int main()
    {
        int len,len1,len2;
        int i,j;
        while(scanf("%s",a)!=EOF)
        {
            len1=strlen(a);
            scanf("%s",b);
            len2=strlen(b);
            int ans1=solve(len1,a,len2,b);
            int ans2=solve(len2,b,len1,a);
            if(ans1>ans2)
            {
                printf("%s",a);
                printf("%s
    ",b+ans1);
            }
            else if(ans2>ans1)
            {
                printf("%s",b);
                printf("%s
    ",a+ans2);
            }
            else
            {
                if(strcmp(a,b)<0)
                {
                    printf("%s", a);
                    printf("%s
    ", b+ans1);
                }
                else
                {
                    printf("%s",b);
                    printf("%s
    ",a+ans1);
                }
            }
        }
        return 0;
    }


     

  • 相关阅读:
    python读写hdf5及cdf格式文件
    常用python shell
    opencv的使用——经典大坑
    opencv python实用操作
    opencv python基本操作
    opencv c++实用操作
    opencv c++基本操作
    opencv安装
    [HNOI2005]星际贸易
    [2017SEERC]Divide and Conquer
  • 原文地址:https://www.cnblogs.com/vermouth/p/3832214.html
Copyright © 2011-2022 走看看