zoukankan      html  css  js  c++  java
  • poj 3080 Blue Jeans(kmp)

    poj 3080 PKU 3080 Blue Jeans(kmp)

    ?
    #include<stdio.h>
    #include<string.h>
    const int N=100;
    int n,m,next[N];
    char dna[N][N];
    void get_next(char *str,int len)
    {

    next[0]=-1;
    int j=0,k=-1;//k记录next[];

    while(j<len)
    {
    if(k==-1||str[j]==str[k])
    {
    k++;
    j++;
    if(str[k]!=str[j])
    next[j]=k;
    else next[j]=next[k];

    }
    else k=next[k];
    }
    }
    int kmp(char *s,int slen)
    {

    get_next(s,slen);
    int f=0,j,k,i;
    for(i=1;i<m;i++)
    {
    int k=0, j=0;
    int len=strlen(dna[i]);
    while(j<len&&k<slen)
    {
    if(k==-1||s[k]==dna[i][j])
    {
    j++;
    k++;
    }
    else k=next[k];
    }
    if(k<slen)break;

    }
    if(i==m)return 1;
    else return 0;
    }

    int main()
    {
    int i,j,k,sum,max=-1;
    char s[63],ans[63];
    scanf("%d",&n);
    while(n--)
    {
    max=-1;
    scanf("%d",&m);
    getchar();
    for(i=0;i<m;i++)
    {
    gets(dna[i]);
    }
    int len=strlen(dna[0]);

    for(i=0;i<len;i++)
    {
    for(j=i;j<len;j++)
    {
    sum=0;
    for(k=i;k<=j;k++)
    {
    s[sum++]=dna[0][k];
    }
    s[sum]='\0';
    if(kmp(s,sum)==1)
    {
    if(sum>max)
    {
    strcpy(ans,s);
    max=sum;
    }
    else
    {
    if(max==sum&&strcmp(ans,s)>0)
    {
    strcpy(ans,s);
    }
    }
    }
    }
    }
    if(max<3)printf("no significant commonalities\n");
    else printf("%s\n",ans);


    }

    }


    编辑器加载中...

  • 相关阅读:
    HDU 2544 最短路
    HDU 3367 Pseudoforest
    USACO 2001 OPEN
    HDU 3371 Connect the Cities
    HDU 1301 Jungle Roads
    HDU 1879 继续畅通工程
    HDU 1233 还是畅通工程
    HDU 1162 Eddy's picture
    HDU 5745 La Vie en rose
    HDU 5744 Keep On Movin
  • 原文地址:https://www.cnblogs.com/acSzz/p/2398598.html
Copyright © 2011-2022 走看看