http://acm.hdu.edu.cn/showproblem.php?pid=1238

考察基本功的题目,把字符串按长度排序之后暴力即可

0的情况需要特判,wa1次

脑残没删注释,wa N次。。。

#include <iostream>
using namespace std ;
typedef struct L{
    char s[101] ;
    int l ;
}L ;
L kk[101] ;
int cmp(L a,L b)
{
    return a.l<b.l ;
}
int isson(char *a,char *b) 
{
    int len1=strlen(a) ;
    int len2=strlen(b) ;
    int i,j ;
    for(i=0 ;i<len1 ;i++)
    {
        if(a[i]==b[0])
        {
            for(j=1 ;j<len2 && i+j<len1 ;j++)
            {
                if(a[i+j]!=b[j])
                    break ;
            }
            if(j==len2)
                return 1 ;
        }
    }
    return 0 ;
}
int main()
{
    int t ;
    scanf("%d",&t) ;
    while(t--)
    {
        int n ;
        scanf("%d",&n) ;
        for(int i=0 ;i<n ;i++)
        {
            scanf("%s",kk[i].s) ;
            kk[i].l=strlen(kk[i].s) ;
        }
        sort(kk,kk+n,cmp) ;
        char son[101] ;
        int i,j,k ;
        int flag=0 ;
        for(i=kk[0].l ;i>=0 ;i--)
        {
            int idx=0 ;
            if(flag)
                break ;
            if(i==0)
            {
                puts("0") ;
                break ;
            }
            while(1)
            {
                if(idx+i>kk[0].l)
                    break ;
                for(j=idx ;j<idx+i ;j++)
                    son[j-idx]=kk[0].s[j] ;
                son[j]='\0' ;
                for(k=1 ;k<n ;k++)
                {
                    if(isson(kk[k].s,son))
                        continue ;
                    else
                        break ;
                }
                if(k==n)
                {
                    flag=1 ;
                    printf("%d\n",i) ;
                    break ;
                }
                char nson[101] ;
                for(j=0 ;j<i ;j++)
                    nson[j]=son[i-1-j] ;
                nson[j]='\0' ; 
                for(k=1 ;k<n ;k++)
                {
                    if(isson(kk[k].s,nson))
                        continue ;
                    else
                        break ;
                }
                if(k==n)
                {
                    flag=1 ;
                    printf("%d\n",i) ;
                    break ;
                }
                idx++ ;
            }
        }
    }
    return 0 ;
}
View Code