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 ; }