hdu 1867 A + B for you again

来源:互联网 发布:ubuntu16安装php 编辑:程序博客网 时间:2024/06/05 05:23
一开始wa了很多把, 最后发现自己和之前做的另一道KMP题目搞混了.

这题子串不能出现在句中.

#include <stdio.h>#include <string.h>#define N 1000002  #define M 1000002 char a[M], b[N];int Next[N];void getNext(char s[], int len){    int i, j;    i = 0; j = -1;    Next[0] = -1;    while (i < len)    {        if (j == -1 || s[i] == s[j])            ++i, ++j, Next[i] = j;        else            j = Next[j];    }}int KMP(const char a[], const char b[], int pos, int next[], int la, int lb)  {    int i, j;    i = pos, j = 0;    while (i < la)    {        if (j == -1 || a[i] == b[j])            ++i, ++j;        else            j = next[j];if(j==lb&&i<la)// 因为不能在主串中间,所以主串没跑完,不能退出{j=0;}    }    return j;}int main()   {int numa,numb,lena,lenb;    while (scanf("%s%s",a,b)!=EOF)// 注意下  之前打成NULL 一直OLE    { lena=strlen(a);lenb=strlen(b);        getNext(b , lenb);        numb=KMP(a, b, 0,Next, lena,lenb);getNext(a , lena);        numa=KMP(b, a, 0,Next, lenb,lena);if(numa>numb){printf("%s%s\n",b,a+numa);}else if(numa<numb){printf("%s%s\n",a,b+numb);}else //之前比较整合后 的字典序 没想到只用考虑 a,b原来的字符串的字典序{if(strcmp(a,b)<=0)printf("%s%s\n",a,b+numb);elseprintf("%s%s\n",b,a+numa);}    }    return 0;}


0 0
原创粉丝点击