hdu1867 A + B for you again

#include <stdio.h>
#include <string.h>
#define MAXN 100005
char str1[MAXN],str2[MAXN];
int next[MAXN];
void getNext(char *s,int len)
{
    int j=0,k=-1;
    next[0]=-1;
    while( j < len )
    {
        if(k == -1 || s[j] == s[k])
        {
            ++j;
            ++k;
            next[j] = k;
        }
        else k = next[k];
    }
}
int kmp(char *s,char *pat)
{
    int i = 0,j = 0,len1 = strlen(s),len2 = strlen(pat);
    getNext(pat,len2);
    while(i < len1 && j < len2)
    {
        if( j == -1 || s[i] == pat[j])
        {
            ++i;
            ++j;
        }
        else j = next[j];
    }
// printf("i=%d j=%d\n",i,j);
    if( i >= len1 ) // asdf sdfgh   asdf asdfgh
    {
        return j;
    }
    else //asdf ghk   asdfx  sdfgh
    {
        return 0;
    }
}
int main()
{
    while(scanf("%s%s",str1,str2)!=EOF)
    {
        int idx1,idx2;
        idx2 = kmp(str1,str2);
        idx1 = kmp(str2,str1);
// printf("idx2=%d  idx1=%d\n",idx2,idx1);
        if( idx1 == idx2)
        {
            if(strcmp(str1,str2) < 0)
            {
                printf("%s%s",str1,str2+idx2);
            }
            else
            {
                printf("%s%s",str2,str1+idx1);
            }
        }
        else if( idx2 > idx1 )
        {
            printf("%s%s",str1,str2+idx2);
        }
        else
        {
            printf("%s%s",str2,str1+idx1);
        }
        printf("\n");
    }
    return 0;
}

posted @ 2010-08-27 14:14  菜到不得鸟  阅读(543)  评论(0)    收藏  举报