hdu1238 参考答案
1
2
3
4
5
6
7
8
9
10
11 #include
12 #include
13 using namespace std;
14 const int N=101;
15 char s[N][N];
16 int n;
17 int id,len;
18
19
20 bool Match1(int start,int len,int begin,int k)
21 {
22 int i=0;
23 while(i<len)
24 {
25 if(s[id][start+i]!=s[k][begin+i])
26 break;
27 i++;
28 }
29 if(i>=len)
30 return true;
31 i=0;
32 int end=begin+len-1;
33 while(i<len)
34 {
35 if(s[id][start+i]!=s[k][end-i])
36 break;
37 i++;
38 }
39 if(i>=len)
40 return true;
41 return false;
42 }
43
44
45 bool Match(int start,int len)
46 {
47 int tmp;
48 bool find;
49 for(int k=0;k<n;k++)
50 {
51 find=false;
52 tmp=strlen(s[k]);
53 for(int i=0;i<=tmp-k;i++)
54 {
55 if(Match1(start,len,i,k))
56 {
57 find=true;
58 break;
59 }
60 }
61 if(find==false)
62 return false;
63 }
64 return true;
65 }
66 int Solve()
67 {
68 id=0;len=100;
69 for(int i=0;i<n;i++)
70 if(strlen(s[i])<len)
71 {
72 len=strlen(s[i]);
73 id=i;
74 }
75 for(int k=len;k>=1;k--)
76 for(int i=0;i<=len-k;i++)
77 if(Match(i,k))
78 return k;
79 return 0;
80 }
81 int main()
82 {
83 int test;
84 scanf("%d",&test);
85 while(test-->0)
86 {
87 scanf("%d",&n);
88 for(int i=0;i<n;i++)
89 {
90 scanf("%s",s[i]);
91 }
92 int ans=Solve();
93 printf("%d\n",ans);
94 }
95 }
hdu1238 参考答案 (2008-09-19 19:33:50由218编辑)