HDU-1867-A + B for you again

来源:互联网 发布:windows exe elf 编辑:程序博客网 时间:2024/06/07 18:33

//这是一道字符串匹配的问题(KMP),我们先把它们按照题目要求,求出最大匹配数,然后比较,输出最大的,相同则输出字典数小的//

AC代码:

#include<stdio.h>#include<string.h>#define N 100005int next[N];char s[N];char t[N];void get_next(char *s,char *t){    int len2=strlen(t);    int i=0;    int j=-1;    next[0]=-1;    while(i<len2)    {        if(j==-1||t[i]==t[j])        {            i++;            j++;            next[i]=j;        }        else        {            j=next[j];        }    }}int kmp(char *s,char *t){    int len1=strlen(s);    int len2=strlen(t);    memset(next,0,sizeof(next));    get_next(s,t);    int i=0;    int j=0;    while(i<len1)    {        if(j==-1||s[i]==t[j])        {            i++;            j++;        }        else        {            j=next[j];        }    }    return j;}int main(){    while(scanf("%s%s",t,s)!=EOF)    {        int k1=kmp(s,t);        int k2=kmp(t,s);        if(k1==k2)        {            if(strcmp(s,t)<0)            {                printf("%s%s",s,t+k1);            }            else            {                printf("%s%s",t,s+k2);            }        }        else if(k1>k2)        {            printf("%s%s",s,t+k1);        }        else        {            printf("%s%s",t,s+k2);        }        printf("\n");    }    return 0;}


0 0